import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.Scanner;

public class MinListeTest extends JFrame
{
  private JTextField fnavn, enavn;
  private JButton settInn, vis, fjern;
  private JTextArea utskrift;
  private Samling<Person> liste = new MinListe<Person>();
  private String filnavn = "navneliste.txt";

  public MinListeTest()
  {
    super( "Personliste" );
    fnavn = new JTextField( 20 );
    enavn = new JTextField( 20 );
    JPanel navnepanel = new JPanel();
    navnepanel.add( new JLabel( "Fornavn" ) );
    navnepanel.add( fnavn );
    navnepanel.add( new JLabel( "Etternavn" ) );
    navnepanel.add( enavn );

    settInn = new JButton( "Sett inn" );
    fjern = new JButton( "Fjern" );
    vis = new JButton( "Vis liste" );
    Knappelytter lytter = new Knappelytter();
    settInn.addActionListener( lytter );
    vis.addActionListener( lytter );
    fjern.addActionListener( lytter );
    JPanel knappepanel = new JPanel();
    knappepanel.add( settInn );
    knappepanel.add( vis );
    knappepanel.add( fjern );
    utskrift = new JTextArea( 10, 50 );
    Container c = getContentPane();
    c.add( navnepanel, BorderLayout.NORTH );
    c.add( new JScrollPane( utskrift ), BorderLayout.CENTER );
    c.add( knappepanel, BorderLayout.SOUTH );
    lesFil();
    pack();
    setVisible( true );
  }

   public void settInnPerson()
	 {
	    String fornavn = fnavn.getText();
	    String etternavn = enavn.getText();
	    if ( !fornavn.equals( "" ) && !etternavn.equals( "" ) )
	    {
				Person ny = new Person(fornavn, etternavn);
				if(liste.inneholder(ny))
		    {  utskrift.setText( ny + " er allerede i listen." );
	         fnavn.setText( "" );
	         enavn.setText( "" );
	         fnavn.requestFocus();
			  }
			  else
			  {
					liste.settInn( ny );
					utskrift.setText( ny + " er nå satt inn i listen." );
					//fnavn.setText( "" );
	        //enavn.setText( "" );

				}
	    }
	    else
	      JOptionPane.showMessageDialog( this,
	                                     "Både fornavn og etternavn må skrives!" );
	  }

	  public void fjernPerson()
	  {
		    String fornavn = fnavn.getText();
		    String etternavn = enavn.getText();
		    if ( !fornavn.equals( "" ) && !etternavn.equals( "" ) )
		    {
					Person p = new Person(fornavn, etternavn);
					if(liste.fjern(p))
			    {  utskrift.setText( p + " er fjernet fra listen." );
		         fnavn.setText( "" );
		         enavn.setText( "" );
		         fnavn.requestFocus();
				  }
				  else
				  {
						utskrift.setText( p + " finners ikke i listen." );
					}
		    }
		    else
		      JOptionPane.showMessageDialog( this,
		                                     "Både fornavn og etternavn må skrives!" );
		  }


	  public void skrivUtListe()
	  {
	    utskrift.setText( liste.toString() );
    }

  public void lesFil()
  {
  	BufferedReader innfil = null;
  	try
  	{
  		innfil = new BufferedReader(
  				new FileReader(filnavn));
  		String navn = null;
  		do
  		{
  			navn = innfil.readLine();
  			if (navn != null)
  			{
  				Scanner leser = new Scanner( navn );
    	    leser.useDelimiter("[,\\s]+");
    	    String etternavn = null;
    	    if (leser.hasNext())
    	    	etternavn = leser.next();
    	    String fornavn = null;
    	    if (leser.hasNext())
    	    	fornavn = leser.next();
    	    if ( etternavn != null && fornavn != null)
    	    	liste.settInn(new Person(fornavn, etternavn));
    	    leser.close();
  			}
  		} while (navn != null);
  		innfil.close();
  	}
  	catch (FileNotFoundException fnf)
  	{
  		JOptionPane.showMessageDialog(this,"Manglende fil",
  				"Finner ikke fil " + filnavn,
  				JOptionPane.WARNING_MESSAGE);
  	}
  	catch (IOException ioe)
  	{
  		JOptionPane.showMessageDialog(this,"Filproblem",
  				"Problem med å lese fra fil " + filnavn,
  				JOptionPane.WARNING_MESSAGE);
  	}
  }

/*
  public void skrivFil()
  {
  	liste.skrivFil(filnavn);
  }
*/


  private class Knappelytter implements ActionListener
  {
    public void actionPerformed( ActionEvent e )
    {
      if ( e.getSource() == settInn )
        settInnPerson();
     else if ( e.getSource() == fjern)
        fjernPerson();
      else if ( e.getSource() == vis )
        skrivUtListe();
    }
  }


	  public static void main( String[] args )
	  {
	  	EventQueue.invokeLater(new Runnable()
			{
				public void run()
				{
					final MinListeTest vindu = new MinListeTest();
					vindu.addWindowListener(
							new WindowAdapter()
							{
								public void windowClosing(WindowEvent e)
								{
								 //	vindu.skrivFil();
								 System.exit( 0 );
								}
							});
				}
			});
  }
}