/******************************************************************************
 *  Compilation:  javac Horloge.java
 *  Execution:    java Horloge
 *  Dependences: StdDraw.java
 *
 *
 ******************************************************************************/
import java.util.* ;

public class Horloge2 {

    final static int TIME_STEP = 1000; // millisecondes
    final static double RAYON = 1.0;
    final static double SIZE_S = 0.9*RAYON;
    final static double SIZE_M = 0.9*RAYON;
    final static double SIZE_H = 0.5*RAYON;
    final static double EP_S = 0.01;
    final static double EP_M = 0.02;
    final static double EP_H = 0.025;


    public static void main(String[] args) {
	    StdDraw.enableDoubleBuffering();
        StdDraw.setXscale(-1.1,1.1);
        StdDraw.setYscale(-1.1,1.1);
        double hours ;
        double minutes ;
        double seconds ;
        double msecondes ;
        double angle = 0.0;

        while (true) {

            hours = Calendar.getInstance().get(Calendar.HOUR);
            minutes = Calendar.getInstance().get(Calendar.MINUTE);
            seconds = Calendar.getInstance().get(Calendar.SECOND);
            msecondes = Calendar.getInstance().get(Calendar.MILLISECOND);

            StdDraw.clear(StdDraw.LIGHT_GRAY);
            StdDraw.setPenRadius();

            // cercle du fond
            StdDraw.setPenColor(StdDraw.BLACK);
            StdDraw.setXscale(-1.1, 1.1);
            StdDraw.setXscale(-1.1, 1.1);
            StdDraw.filledCircle(0, 0, RAYON);

            // repères
            for (int i = 0; i < 60; i++) {
                double theta = Math.toRadians(i * 6);
                double size = 0.0;
                if (i % 5 == 0) {
                    StdDraw.setPenColor(StdDraw.ORANGE);
                    size = 0.05;
                } else {
                    StdDraw.setPenColor(StdDraw.WHITE);
                    size = 0.015;
                }

                StdDraw.filledCircle(RAYON * Math.cos(theta), RAYON * Math.sin(theta), size);
            }


            // aiguille des secondes
            StdDraw.setPenRadius(EP_S);
            StdDraw.setPenColor(StdDraw.YELLOW);
            angle = Math.toRadians(6 * (seconds + msecondes / 1000.0));
            StdDraw.line(0, 0, SIZE_S * Math.sin(angle), SIZE_S * Math.cos(angle));

            // aiguille des minutes
            StdDraw.setPenRadius(EP_M);
            StdDraw.setPenColor(StdDraw.GRAY);
            angle = Math.toRadians(6 * (minutes + seconds / 60.0));
            StdDraw.line(0, 0, SIZE_M * Math.sin(angle), SIZE_M * Math.cos(angle));

            // aiguille des heures
            StdDraw.setPenRadius(EP_H);
            StdDraw.setPenColor(StdDraw.WHITE);
            angle = Math.toRadians(30 * (hours + minutes / 60.0));
            StdDraw.line(0, 0, SIZE_H * Math.sin(angle), SIZE_H * Math.cos(angle));

            // affichage numérique de l'heure
            String time = String.format("%2d:%02d:%02d", (int) hours, (int) minutes, (int) seconds);
            StdDraw.setPenColor(StdDraw.WHITE);
            StdDraw.text(0, -0.5, time); // position du texte laissée litérale

            // rafraichissement chaque 1000ms
            StdDraw.show();
            StdDraw.pause(TIME_STEP);
        }
    }

}
