/**
 * Kurzbeschreibung der Klasse Weckuhr:
 * Beschreibung eines analogen Weckers
 * @author (Ihr Name) 
 * @version 2014-11-17
 */
import java.util.*;
public class Weckuhr {
  //=========== Objekt-Attribute =========================    
  private int stunde;
  private int minute;
  private int sekunde;
  private boolean weckfunktion;
  private int weckminute;
  private int weckstunde;
  private AbiTurtle painter;
  private Timer quarz;
  private Impuls sekundengeber;

  //=========== Konstruktor(en) ==========================
  /**
   * Konstruktor für Objekte der Klasse cUhr
   */
  public Weckuhr() {    
    painter = new AbiTurtle(400,400);
    painter.penUp();
    painter.hideTurtle();
    stunde = 0;
    minute = 0;
    sekunde = 0;
    weckminute = 10;
    weckstunde = 15;
    weckfunktion = true;
    quarz = new Timer();
  }

  //=========== Objekt-Methoden ==========================
  /**
   * Methode zum Ausführen eines Zeitschritts (1 Sekunde)
   */
  public void geheSchritt() {
    if (sekunde < 59)    {
      sekunde++;
    }
    else {
      sekunde = 0;
      minute++;
      if (minute > 59) {
        minute = 0;
        stunde++;
        if (stunde > 23) {
          stunde = 0;
        }
      }
    }
  }

  /**
   * Methode zum Prüfen, ob ein Alarm ausgelöst wurde
   * @return ja/nein
   */
  private boolean istAlarm(){
    if (weckfunktion && stunde == weckstunde && minute == weckminute){
      return true;
    }
    else {
      return false;
    }
  }

  /**
   * Methode zur Zeichnen des Rahmens der Uhr
   */
  public void zeichneRahmen() {
    int viertel;
    painter.setColor(Turtle.lightGray);
    painter.moveTo(painter.getMaxX()/2,painter.getMaxY()/2);
    painter.fillCircle(130);
    painter.setColor(Turtle.black);
    // ------
    //hier Quelltext ergänzen!

    //-------
  }

  /**
   * Festlegung der Weckzeit
   * @param pStunde Weckstunde
   * @param pMinute Weckminute
   */
  public void setWeckzeit(int pStunde, int pMinute) {
    //hier Quelltext anpassen
    weckstunde = pStunde;
    weckminute = pMinute;
  }

  // hier Quelltext zur Aufgaben 3.7 ergänzen

  // hier Quelltext zur Aufgabe 3.8 ergänzen

  //---------------------------------------------------------------
  //--- Alles, was ab hier kommt, ist nicht zu verändern! ----------
  //---------------------------------------------------------------

  /**
   * Methode zum Starten der Automatikuhr
   * bitte unbedingt mit "beende" beenden!
   */
  public void starte() {
    Date date = new Date();
    Calendar calendar = GregorianCalendar.getInstance();
    calendar.setTime(date);
    stunde = calendar.get(Calendar.HOUR_OF_DAY);
    minute = calendar.get(Calendar.MINUTE);
    sekunde = calendar.get(Calendar.SECOND);
    sekundengeber = new Impuls(this);
    quarz.scheduleAtFixedRate(sekundengeber,1000,1000);
    //1000,1000: nach 1 s im Sekundentakt
  }

  /**
   * Methode zum Beenden der Uhrenfunktionen
   */
  public void beende(){
    sekundengeber.cancel();
    quarz.cancel();
  }

  /**
   * Methode zum Zeichnen der Uhr mit Zeigern
   */
  public void zeichneUhr()  {
    painter.clearScreen();
    this.zeichneRahmen();
    painter.moveTo(painter.getMaxX()/2+40,painter.getMaxY()/2);  
    if (weckfunktion){
      painter.setColor(Turtle.red);
      if (stunde == weckstunde && minute == weckminute){
        painter.write("    Alarm");
      }
    }
    else{
      painter.setColor(Turtle.green);
    }
    painter.fillCircle(10);
    painter.moveTo(painter.getMaxX()/2,painter.getMaxY()/2);
    painter.setDirection(sekunde*360/60 - 90);  
    painter.penDown();
    painter.setColor(Turtle.red);
    painter.move(100);
    painter.penUp();
    painter.moveTo(painter.getMaxX()/2,painter.getMaxY()/2);
    painter.setDirection(minute*360/60 - 90);  
    painter.penDown();
    painter.setColor(Turtle.blue);
    painter.move(95);
    painter.penUp();
    painter.moveTo(painter.getMaxX()/2,painter.getMaxY()/2);
    painter.setDirection(stunde*360/12 + minute*30/60 - 90);  
    painter.penDown();
    painter.setColor(Turtle.green);
    painter.move(80);
    painter.penUp();    
  }
} // Ende der Klasse cUhr