import fi.jyu.mit.ohj2.IO;
/**
 * Käyttöliittymäluokka Kerho-ohjelmaan
 * Kerho-ohjelman menujen testaus.  Varsinaiset toiminnot puuttuvat.<br>
 * Tarvitsee avukseen JAR-paketin:
 * <a href="http://www.mit.jyu.fi/vesal/kurssit/ohj2/ali/Ali.jar">Ali.jar</a><br>
 * Aliohjelmien dokumentaatio on:
 * <a href="http://www.mit.jyu.fi/vesal/kurssit/ohj2/ali/index.html">\kurssit\ohj2\ali</a><br>
 * <br>
 *
 * @author  Vesa Lappalainen
 * @version 1.0, 09.02.2003
 */
public class Naytto {

  /**
   * Viite kerhoon, jota tämä käyttöliittymä käyttää
   */
  private Kerho kerho;

  /**
   * Käyttöliittymän alustus.  Käyttöliittymälle PITÄÄ kerto mitä
   * Kerho se käsittelee.
   * @param kerho jota käsitellään
   * @throws Exception jos kerhoa ei ole tuotu parametrina
   */
  public Naytto(Kerho kerho) throws Exception {
    if ( kerho == null ) throw new Exception("Kerho täytyy antaa!");
    this.kerho = kerho;
  }

  /**
   * Apualiohjelma tulostamiseen
   * @param s tuolsettava merkkijono
   * @param printlf tulostetaanko (true) rivinvaihto vai ei (false)
   */
  private static void tulosta(String s, boolean printlf) {
    System.out.print(s);
    if ( printlf ) System.out.println();
  }

  /**
   * Apualiohjelma tulostamiseen
   * @param s
   */
  public static void tulosta(String s) {
    tulosta(s,true);
  }

  /**
   * Tulostaa "Ei toimi vielä" ja jää odottamaan näppäimen painallusta
   */
  private void ei_toimi()  {
    tulosta("Ei toimi vielä!");
    IO.odota_jotakin();
  }

  /**
   * Avustustoiminto
   * @param valinta kirjain jolla toiminto aktivoitiin
   */
  private void avustus(char valinta) {
    tulosta("\n\n\n");
    tulosta(valinta +  ".  Avustus");
    tulosta(          "===========");
    ei_toimi();
  }

  /**
   * Uuden jäsenen lisäys
   * @param valinta kirjain jolla toiminto aktivoitiin
   */
  private void lisaa_uusi_jasen(char valinta) {
    tulosta("\n\n\n");
    tulosta(valinta +  ".  Uuden jäsenen lisäys");
    tulosta(          "========================");
    tulosta("");
    ei_toimi();
  }


  /**
   * Jäsenen tietojen etsiminen
   * @param valinta kirjain jolla toiminto aktivoitiin
   */
  private void etsi_jasenen_tiedot(char valinta)
  {
    tulosta("\n\n\n");
    tulosta(valinta +  ".  Etsi j„senen tiedot");
    tulosta(          "=======================");
    ei_toimi();
  }


  /**
   * Ohjelman tulosteet, pitäisi tulla alimenu
   * @param valinta kirjain jolla toiminto aktivoitiin
   */
  private void tulosteet(char valinta) {

    /*
      0 = päävlaintaan
      1 = tarrat
      2 = puhlu
      3 ...

    */
    tulosta("\n\n\n");
    tulosta(valinta +  ".  Tulosteet");
    tulosta(          "=============");
    ei_toimi();
  }


  /**
   * Tietojen korjailu
   * @param valinta kirjain jolla toiminto aktivoitiin
   */
  private void tietojen_korjailu(char valinta) {
    tulosta("\n\n\n");
    tulosta(valinta +  ".  Tietojen korjailu");
    tulosta(          "=====================");
    ei_toimi();
  }


  /**
   * Jäsenmaksujen päivitys
   * @param valinta kirjain jolla toiminto aktivoitiin
   */
  private void paivita_jasenmaksuja(char valinta) {
    tulosta("\n\n\n");
    tulosta(valinta +  ".  Päivitä jäsenmaksuja");
    tulosta(          "========================");
    ei_toimi();
  }


  /**
   * Tulostaa ohjelman päämenun
   */
  private void paamenu() {
    tulosta("\n\n\n\n");
    tulosta("Jäsenrekisteri");
    tulosta("==============");
    tulosta("");
    tulosta("Kerhossa " + kerho.getNimi()+ " on " +
             kerho.getJasenia() + " jäsentä.");
    tulosta("");
    tulosta("Valitse:");
    tulosta("   ?  = Avustus");
    tulosta("   0  = lOpetus");
    tulosta("   1  = Lisää uusi jäsen");
    tulosta("   2  = Etsi jäsenen tiedot");
    tulosta("   3  = Tulosteet");
    tulosta("   4  = tietojen Korjailu");
    tulosta("   5  = päivitä Jäsenmaksuja");
    tulosta("   :",false);
  }

  /**
   * Silmukka jossa odotetaan näppäint ja suoritetaan vastaava toiminto.
   * 0:n painaminen lopettaa silmukan ja palaa kutsuvaan ohjelmaan.
   * @return palauttaa 0 jos kaikki meni hyvin, 1 jos tuli virhe
   */
  public int paavalinta() {
    char nappain;

    while ( true ) {

      paamenu();

      nappain = IO.odota_nappain("?012345",IO.EI_OLETUSTA,IO.MERKKI_ISOKSI);

      switch (nappain) {
        case '?': avustus(nappain);                break;
        case '0': return 0;
        case '1': lisaa_uusi_jasen(nappain);       break;
        case '2': etsi_jasenen_tiedot(nappain);    break;
        case '3': tulosteet(nappain);              break;
        case '4': tietojen_korjailu(nappain);      break;
        case '5': paivita_jasenmaksuja(nappain);   break;
        default : tulosta("Näin ei voi käydä!");  return 1;
      }

    }
  }

  /**
   * Tulostaa ohjelman logon
   */
  private void logo() {
    tulosta("");
    tulosta("      ###################################");
    tulosta("      #   J Ä S E N R E K I S T E R I   #");
    tulosta("      #     versio 9.95                 #");
    tulosta("      #     Hannu Hanhi                 #");
    tulosta("      ###################################");
  }


  /**
   * Tulostaa ohjelman alkuohjeet
   */
  public void ohjeet() {
    logo();
    tulosta("");
    tulosta("Tällä ohjelmalla ylläpidetään kerhon jäsenrekisteriä.");
  }


  /**
   * Tulostaa loppukiitokset
   */
  public void kiitokset() {
    tulosta("");
    tulosta("KIITOS KÄYTÖSTÄ JA TERVETULOA UUDELLEEN");
    tulosta("");
    tulosta("");
  }


  /**
   * Lukee kerhon tiedot levyltä.  Kysyy ensin käyttäjältä tiedoson nimen.
   * @return palauttaa tyhjän merkkijonon jos kaikki menee hyvin, muuten
   * virhetekstin
   */
  public String lue_kerho() {
    tulosta("Anna kerhon nimi>");
    ei_toimi();
    kerho.lue_tiedostosta("kelmit");

    return "";
  }


  /**
   * Tallentaa kerhon tiedot levylle.
   * @return palauttaa tyhjän merkkijonon jos kaikki menee hyvin, muuten
   * virhetekstin
   */
  public String talleta_kerho() {
    logo();

    tulosta("");

    tulosta("Talletus...");
    ei_toimi();

    return "";
  }


  /**
   * Ohjelman pääohjelma
   * @param args komentorivin parametrit, ei käytössä vielä
   */
  public static void main(String[] args) {
    Kerho kerho = new Kerho();

    try {
      Naytto naytto = new Naytto(kerho);

      naytto.ohjeet();

      naytto.lue_kerho();

      naytto.paavalinta();

      naytto.talleta_kerho();

      naytto.kiitokset();
    }
    catch (Exception ex) {
      System.out.println("VIRHE: " + ex.getMessage());
    }
  }

}