import java.awt.*;
import java.awt.event.*;
import extra.*;



public class Uppgift9 {
  public static void main(String[] args) { //kör själva starten av programmet här
    Funster mittFunster = new Funster();
  }
}

class Funster
    extends ExtendedFrame
    implements ActionListener { //allt som har med layouten o göra
  private Label label1;
  private Label labelställning;
  private Label label3;
  private Label labelval;
  private Label label5;
  private Label labeldator;
  //public int mpoints, dpoints, datorval;
  private Button a, b, c, d;
  //private String mittval;

  public Funster() {
    setLocation(200, 200);
    setSize(300, 350);
    setBackground(Color.gray);
    setResizable(false);

    setTitle("Mitt sten, sax, påse - spel!");
    //Delarna i fönstret:
    //Övre delen:
    Panel o = new Panel(new GridLayout(4, 1, 10, 10));
    Panel o1 = new Panel(new FlowLayout(FlowLayout.CENTER, 10, 10));
    Panel o2 = new Panel(new FlowLayout(FlowLayout.CENTER, 10, 10));
    Panel o3 = new Panel(new FlowLayout(FlowLayout.CENTER, 10, 10));
    Panel o4 = new Panel(new FlowLayout(FlowLayout.CENTER, 10, 10));
    o1.add(label1 = new Label("Först till tre vinner", Label.CENTER));
    o2.add(labelställning = new Label("                    0 - 0                    ", Label.CENTER));
    //o2.add(labelställning = new Label("" + ställning() + "", Label.CENTER));
    o3.add(label3 = new Label("Spelarens val: ", Label.CENTER));
    o3.add(labelval = new Label("      ", Label.CENTER));
    o4.add(label5 = new Label("Datorns val: ", Label.CENTER));
    o4.add(labeldator = new Label("      ", Label.CENTER));
    o.add(o1); //fäster panelen med Rubriken
    o.add(o2);
    o.add(o3);
    o.add(o4); //fäster datorns val + result
    add(o, BorderLayout.NORTH);

    //nedre delen:
    Panel p = new Panel(new GridLayout(2, 1, 10, 10));
    Panel p1 = new Panel(new FlowLayout(FlowLayout.CENTER, 10, 10));
    Panel p2 = new Panel(new FlowLayout(FlowLayout.CENTER, 10, 10));
    a = new Button("STEN");
    b = new Button("SAX");
    c = new Button("PÅSE");
    d = new Button("NYTT SPEL");
    p1.add(a);
    p1.add(b);
    p1.add(c);
    p2.add(d);
    p.add(p1);
    p.add(p2);
    add(p, BorderLayout.SOUTH);
    //lägger till mouselistener:
    a.addActionListener(this);
    b.addActionListener(this);
    c.addActionListener(this);
    d.addActionListener(this);

    setVisible(true);

  }
  int mpoints, dpoints, datorval;
  String mittval;

  public void ställning() {
    //
    if (datorval==1 && mittval.equalsIgnoreCase("SAX"))
      labelställning.setText("Fy farao");//setDatorPoints(1);
    else if (datorval==1  && mittval.equalsIgnoreCase("PÅSE"))
      setMinaPoints(2);
    else if (datorval==2  && mittval.equalsIgnoreCase("STEN"))
      setMinaPoints(3);
    else if (datorval==2  && mittval.equalsIgnoreCase("PÅSE"))
      setDatorPoints(4);
    else if (datorval==3  && mittval.equalsIgnoreCase("STEN"))
      setDatorPoints(5);
    else if (datorval==3  &&  mittval.equalsIgnoreCase("SAX"))
      setMinaPoints(6);

    else if (mittval.equalsIgnoreCase("STEN") && datorval==2 )
      setMinaPoints(7);
    else if (mittval.equalsIgnoreCase("STEN") && datorval==3 )
      setDatorPoints(8);
    else if ( mittval.equalsIgnoreCase("SAX") && datorval==1 )
      setDatorPoints(9);
    else if ( mittval.equalsIgnoreCase("SAX") && datorval==3 )
      setMinaPoints(10);
    else if (mittval.equalsIgnoreCase("PÅSE") && datorval==1 )
      setMinaPoints(11);
    else if ( mittval.equalsIgnoreCase("PÅSE") && datorval==2 )
      setDatorPoints(12);

    //else
      //labelställning.setText(getMinaPoints() + " - " + getDatorPoints());
  }

  public void setMinaPoints(int y) {
    if(y==0){
       mpoints=0;
     }
     else
     this.mpoints += y;

  }

  public int getMinaPoints() {
    return mpoints;
  }

  public void setDatorPoints(int y) {
    if(y==0){
      dpoints=0;
    }
    else
    this.dpoints += y;

 }



  public int getDatorPoints() { //kommer bara pointsen hit så funkar det
    return dpoints;
  }

  public void actionPerformed(ActionEvent e) {

    if (e.getSource() == a) {
      labelval.setText("STEN");
      setMittVal("STEN");
      Input.delay(1000);
      setDatorVal();
      labeldator.setText(getDatorVal() + "");
      ställning();
      //kollar poängen:
      if(getMinaPoints()>=3){
      labelställning.setText("Du vann, ditt svin!");
      a.setEnabled(false);//knapparna blir inaktiva
      b.setEnabled(false);
      c.setEnabled(false);
      }
      else if(getDatorPoints()>=3){
        labelställning.setText("Datorn vann över dig Pucko!");
        a.setEnabled(false);//knapparna blir inaktiva
        b.setEnabled(false);
        c.setEnabled(false);

      }
      else
        labelställning.setText(getMinaPoints()+" - "+getDatorPoints()); //måste skriva ut ställningen om ej över 3p
    }
    else if (e.getSource() == b) {
      labelval.setText("SAX");
      setMittVal("SAX");
      Input.delay(1000);
      setDatorVal();
      labeldator.setText(getDatorVal() + "");
      ställning();
      //kollar poängen:
      if(getMinaPoints()>=3){
      labelställning.setText("Du vann, ditt svin!");
      a.setEnabled(false);//knapparna blir inaktiva
      b.setEnabled(false);
      c.setEnabled(false);

      }
      else if(getDatorPoints()>=3){
        labelställning.setText("Datorn vann över dig Pucko!");
        a.setEnabled(false);//knapparna blir inaktiva
        b.setEnabled(false);
        c.setEnabled(false);

      }
      else
        labelställning.setText(getMinaPoints()+" - "+getDatorPoints()); //måste skriva ut ställningen om ej över 3p

    }
    else if (e.getSource() == c) {
      labelval.setText("PÅSE");
      setMittVal("PÅSE");
      Input.delay(1000);
      setDatorVal();
      labeldator.setText(getDatorVal() + "");
      ställning();
      //kollar poängen:
      if(getMinaPoints()>=3){
      labelställning.setText("Du vann, ditt svin!");
      a.setEnabled(false);//knapparna blir inaktiva
      b.setEnabled(false);
      c.setEnabled(false);

      }
      else if(getDatorPoints()>=3){
        labelställning.setText("Datorn vann över dig Pucko!");
        a.setEnabled(false);//knapparna blir inaktiva
        b.setEnabled(false);
        c.setEnabled(false);

      }
      else
        labelställning.setText(getMinaPoints()+" - "+getDatorPoints()); //måste skriva ut ställningen om ej över 3p

    }

    else { //new game -funktionen
      labelval.setText("");
      labeldator.setText("");
      labelställning.setText("0 - 0");
      //setMinaPoints(0);
      //setDatorPoints(0);
      a.setEnabled(true);//knapparna blir aktiva
      b.setEnabled(true);
      c.setEnabled(true);

    }
  }

  public void setDatorVal() {
    datorval = (int) (Math.random() * 3) + 1;
}

  public String getDatorVal() {
    if (datorval == 1)
      return "STEN";
    if (datorval == 2)
      return "SAX";
    if (datorval == 3)
      return "PÅSE";
    else
      return "felpåGetDatorVal";
  }

  public void setMittVal(String y) {
    this.mittval = mittval;
  }

  public String getMittVal() {
    return mittval;
  }
}