/* 
* 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 Graficos;

import java.awt.BasicStroke;
import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.*;
import org.jfree.data.xy.XYDataset;
import javax.swing.table.DefaultTableModel;
import java.util.*;
import javax.swing.JOptionPane;


public class TimeSeriesA{

 public static Map<String,Integer> datosHoras = new HashMap<String,Integer>();
 public static String titulo;
    public TimeSeriesA(final String title, JPanel panel, DefaultTableModel modelo)
    {    
        titulo = title;
        XYDataset xydataset = createDataset(modelo);
        JFreeChart jfreechart = createChart(xydataset);
        ChartPanel chartpanel = new ChartPanel(jfreechart, false);
        chartpanel.setPreferredSize(new Dimension(500, 270));
        chartpanel.setMouseZoomable(true, false);
         panel.add(new ChartPanel(jfreechart));
       // panel.invalidate();
       // panel.validate();
      //  setContentPane(chartpanel);
    }
    private static void llenardatosHoras(DefaultTableModel modelo){
       int d = 0;
         String h1;
       if ( modelo.getRowCount() <= 0) {
           return;
       }
        datosHoras.clear();
       int primero;
       h1= modelo.getValueAt(0,0).toString().substring(0,2);
       primero =Integer.parseInt(h1);
       h1= modelo.getValueAt(0,0).toString().substring(3,4);
          int ax = Integer.parseInt(h1);
       h1= modelo.getValueAt(modelo.getRowCount()-1,0).toString().substring(0,2);
       int ultimo = Integer.parseInt(h1); ;
         for (int i =primero ;i<ultimo +1 ;i++) {
            for (int c =ax ;c <6;c++){
                datosHoras.put(hora2digitos(i,c),0);
            }
            ax=0;
        }
      
       try {
        for (int i = 0; i < modelo.getRowCount(); i++) {
           
         h1= modelo.getValueAt(i,0).toString().substring(0,4);
          Integer valor = datosHoras.get(h1);
             d = ppp(valor) ;
     //        d = valor.intValue() ;
          d = d + 1;
        datosHoras.put(h1, d);

         }
       }catch(Exception e){
               e.printStackTrace();}
    }

 private static int ppp(Integer v){
     int d;
     try {
         if (v == null){
             return 0;
         }
           d = v.intValue() ;

        }catch(Exception e){
              // e.printStackTrace();
        return 0;
        }
        return d;
    }
    private static String hora2digitos(int h,int m){
        String h2 = Integer.toString(h);
        String m2 = Integer.toString(m);
        if (h2.length() < 2) h2 = "0"+h2;
        return h2+":"+m2;
    }
    private static XYDataset createDataset(DefaultTableModel modelo)
    {
        datosHoras.clear();
        llenardatosHoras(modelo);
        Date fecha = new Date();
        Calendar calen = Calendar.getInstance();
        calen.setTime(fecha);
        int dia = calen.get(Calendar.DAY_OF_MONTH);
        int mes = calen.get(Calendar.MONTH)+1;
        int ano = calen.get(Calendar.YEAR);
        TimeSeries timeseries = new TimeSeries("Random Data",Minute.class);
        timeseries.clear();
        //Day day2 = new Day(1, 1, 1990);
       
        String t1;
        String h1 ;
            Iterator it = datosHoras.entrySet().iterator();

       while (it.hasNext()) {
           Map.Entry e = (Map.Entry)it.next();
            adicionaraTimeSeries(e.getKey().toString()+"0",Integer.parseInt(e.getValue().toString()),dia,mes,ano, timeseries);
       }
      
        return new TimeSeriesCollection(timeseries);
    }

    private static void adicionaraTimeSeries(String horaM,int valor,int dia,int mes, int ano,TimeSeries timeseries){
        int minuto;

        Hour hora = new Hour(Integer.parseInt(horaM.substring(0,2)),dia,mes,ano);

           minuto = Integer.parseInt(horaM.substring(3,5));
           try {
           timeseries.add(new Minute(minuto,hora),valor);
           } catch(Exception e){
    }
    }
    private static JFreeChart createChart(XYDataset xydataset)
    {
        JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(titulo, "Hora Presente", "Numero", xydataset, false, false, false);
         XYPlot xyplot = (XYPlot)jfreechart.getPlot();
        XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();
        xylineandshaperenderer.setBaseShapesVisible(true);
        xyplot.setRenderer(xylineandshaperenderer);
        return jfreechart;
    }


}