/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package gestor.utiles;

import javax.swing.*;

public final class RelojDigital {

   JLabel lb;
   Timer timer;
   boolean par = false;
   java.text.SimpleDateFormat timeFormatHM_Par = new java.text.SimpleDateFormat("HH:mm");
   java.text.SimpleDateFormat timeFormatHM_Impar = new java.text.SimpleDateFormat("HH.mm");
   java.util.ArrayList<aviso> avisos = new java.util.ArrayList<>();

   public RelojDigital(JLabel label) {
      lb = label;
      timer = new Timer(1000, (java.awt.event.ActionEvent e) -> {
          tickReloj();
      });
   }

   public void añadirAviso(java.util.Date hora, IRelojAvisable avisable) {
      aviso av = new aviso();
      av.hora = hora;
      av.destino = avisable;
      avisos.add(av);
   }

   public void tickReloj() {
      java.util.Date t = new java.util.Date();
      if (par) {
         lb.setText(timeFormatHM_Par.format(t));
      } else {
         lb.setText(timeFormatHM_Impar.format(t));
      }
      par = !par;
      java.util.ArrayList<aviso> borrar = new java.util.ArrayList<>();
      for(aviso av : avisos) {
         if(t.after(av.hora)) {
            av.destino.avisar();
            borrar.add(av);
         }
      }
      for(aviso av : borrar) {
         avisos.remove(av);
      }
   }

   public void start() {
      timer.start();
   }

   public interface IRelojAvisable {
      void avisar();
   }

   class aviso {
      public java.util.Date hora;
      public IRelojAvisable destino;
   }
}
