import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class Login extends JFrame implements ActionListener {
  JTextField user;
  JTextField nick;
  JTextField server;
  JTextField port;
  Variablen var;
  ServerConnection serv;

  public Login (Variablen v, ServerConnection s) {
    super("Login");
    this.setLocation(300,300);
    var = v;
    serv = s;

    server = new JTextField(20);
    port = new JTextField(4);
    user = new JTextField(20);
    nick = new JTextField(20);
    if (var.getUserName() != "nicht gesetzt") user.setText(var.getUserName());
    if (var.getNickName() != "nicht gesetzt") nick.setText(var.getNickName());
    if (var.getServer() != "kein Server") server.setText(var.getServer());
    if (var.getPort() != "7") port.setText(var.getPort());

    JPanel eingabe = new JPanel(new GridLayout(4,2));
    eingabe.add(new JLabel("Server"));
    eingabe.add(server);
    eingabe.add(new JLabel("Port"));
    eingabe.add(port);
    eingabe.add(new JLabel("Username"));
    eingabe.add(user);
    eingabe.add(new JLabel("Nickname"));
    eingabe.add(nick);  
   
    JButton ok = new JButton("Login");
    JButton cancel = new JButton("kein Login");
    ok.addActionListener(this);
    cancel.addActionListener(this);

    JPanel bts = new JPanel(new FlowLayout());
    bts.add(ok);
    bts.add(cancel);
  
    JPanel alles = new JPanel(new GridLayout(2,1));
    alles.add(eingabe);
    alles.add(bts);

    this.getContentPane().add(alles);
    this.pack();
    this.setVisible(true);
  }

  public void actionPerformed (ActionEvent e) {
    boolean userok = !((user.getText().length() < 1) | (user.getText().startsWith("BITTE")));
    boolean nickok = !((nick.getText().length() < 1) | (nick.getText().startsWith("BITTE")));
    boolean serverok = !((server.getText().length() < 1) | (server.getText().startsWith("BITTE")));
    boolean portok = !((port.getText().length() < 1) | (port.getText().startsWith("????")));

    if (e.getActionCommand() == "kein Login") {
      System.out.println("LOGI sets: Abbruch");
      this.setVisible(false);
    }
    else {
      if (userok & nickok & serverok & portok) {
        var.setUserName(user.getText());
        var.setNickName(nick.getText());
        var.setServer(server.getText());
        var.setPort(port.getText());
        this.setVisible(false);
        System.out.println("LOGI sets : USER: "+user.getText()+" | NICK: "+nick.getText());
        System.out.println("LOGI sets : SERVER: "+server.getText()+" | PORT: "+port.getText());
        try {
          serv.connect();
          serv.send("NICK "+var.getNickName());
          serv.send("USER "+var.getNickName()+" 0 * :"+var.getUserName());
          // Modus : USER guest 0 * :Ronnie Reagan
        }
        catch (IOException io) {
          System.err.println("Habe Probleme mit Ein- und Ausgabe!");
          System.err.println("Gebe jetzt auf");      
          System.exit(1);
        }
      }
      else {
        if (!userok) user.setText("BITTE USERNAMEN EINGEBEN!");
	if (!nickok) nick.setText("BITTE NICKNAMEN EINGEBEN!");
        if (!serverok) server.setText("BITTE SERVER EINGEBEN!");
        if (!portok) port.setText("????");
      }
    }
  }
}

