/* 
* 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.*;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.*;

public class StackedBarRenta2 {
    public JFreeChart chart;
    int numeros;
    int presentes;
    int atendidos;
    int ausentes;
    int huecos;
    DefaultTableModel modelo1;
    DefaultTableModel modelo2;
    DefaultTableModel modelo3;
    DefaultTableModel modelo4;
    CategoryDataset categorydataset;
    

    public StackedBarRenta2(String title, JPanel panel, DefaultTableModel modelo1, DefaultTableModel modelo2, DefaultTableModel modelo3, DefaultTableModel modelo4) {
        this.modelo1 = modelo1;
        this.modelo2 = modelo2;
        this.modelo3 = modelo3;
        this.modelo4 = modelo4;
        
        chart = createChart(title);
        panel.add(new ChartPanel(chart));
        panel.revalidate();
        
    }
    public CategoryDataset getmodelo(){
        return categorydataset;
    }

    private CategoryDataset crearDataset() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        numeros = 0;
        presentes = 0;
        ausentes = 0;
        huecos = 0;
        int ini = 23;
        int fin = 0;
        int p = modelo1.getRowCount();
        for (int i = 0; i < p; i++) {
            Number valor = (Number) modelo1.getValueAt(i, 0);
            if (valor.intValue() < ini) {
                ini = valor.intValue();
            }
            if (valor.intValue() > fin) {
                fin = valor.intValue();
            }
        }

        p = modelo2.getRowCount();
        for (int i = 0; i < p; i++) {
            Number valor = (Number) modelo2.getValueAt(i, 0);
            if (valor.intValue() < ini) {
                ini = valor.intValue();
            }
            if (valor.intValue() > fin) {
                fin = valor.intValue();
            }
        }

        p = modelo3.getRowCount();
        for (int i = 0; i < p; i++) {
            Number valor = (Number) modelo3.getValueAt(i, 0);
            if (valor.intValue() < ini) {
                ini = valor.intValue();
            }
            if (valor.intValue() > fin) {
                fin = valor.intValue();
            }
        }
            p = modelo4.getRowCount();
        for (int i = 0; i < p; i++) {
            Number valor = (Number) modelo4.getValueAt(i, 0);
            if (valor.intValue() < ini) {
                ini = valor.intValue();
            }
            if (valor.intValue() > fin) {
                fin = valor.intValue();
            }
        }


        ini = ini - 1;
        fin = fin + 2;
        for (int i = ini; i < fin; i++) {
            dataset.setValue(0.0, "Presentes", "Hora " + i);
        }
        p = modelo1.getRowCount();
        for (int i = 0; i < p; i++) {
            String serie = "Hora " + modelo1.getValueAt(i, 0);
            Number valor = (Number) modelo1.getValueAt(i, 1);
            dataset.setValue(new Double(valor.doubleValue()), "Presentes", serie);
            presentes = presentes + valor.intValue();
        }
        p = modelo2.getRowCount();
        for (int i = 0; i < p; i++) {
            String serie = "Hora " + modelo2.getValueAt(i, 0);
            Number valor = (Number) modelo2.getValueAt(i, 1);
            dataset.setValue(new Double(valor.doubleValue()), "Atendidos", serie);
            atendidos = atendidos + valor.intValue();
        }
        p = modelo3.getRowCount();
        for (int i = 0; i < p; i++) {
            String serie = "Hora " + modelo3.getValueAt(i, 0);
            Number valor = (Number) modelo3.getValueAt(i, 1);
            dataset.setValue(new Double(valor.doubleValue()), "Ausentes", serie);
            ausentes = ausentes + valor.intValue();
        }
         p = modelo4.getRowCount();
        for (int i = 0; i < p; i++) {
            String serie = "Hora " + modelo4.getValueAt(i, 0);
            Number valor = (Number) modelo4.getValueAt(i, 1);
            dataset.setValue(new Double(valor.doubleValue()), "Huecos", serie);
            huecos = huecos + valor.intValue();
        }
        return dataset;
    }

    private JFreeChart createChart(String title) {
        categorydataset = crearDataset();
        Locale locale = Locale.ITALIAN;
        String horaejecucion = DateFormat.getTimeInstance(DateFormat.SHORT, locale).format(new Date());
        JFreeChart jfreechart = ChartFactory.createStackedBarChart(title, "Citas", "Estado de las  Citas       " + horaejecucion, categorydataset, PlotOrientation.HORIZONTAL, true, true, true);
        jfreechart.setBackgroundPaint(Color.white);
        jfreechart.getTitle().setMargin(2D, 0.0D, 0.0D, 0.0D);

        TextTitle texttitle = new TextTitle("Total Citas: " + (presentes + atendidos + ausentes) + "      Presentes: " + presentes + "      Atendidos: " + atendidos + "      Ausentes: " + ausentes + "      Huecos: " + huecos, new Font("Dialog", 0, 11));
        texttitle.setPosition(RectangleEdge.BOTTOM);
        texttitle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        texttitle.setMargin(0.0D, 0.0D, 4D, 4D);
        jfreechart.addSubtitle(texttitle);

        CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
        categoryplot.setBackgroundPaint(Color.WHITE);
        categoryplot.setDomainGridlinePaint(Color.white);
        categoryplot.setDomainGridlinesVisible(true);
        categoryplot.setRangeGridlinePaint(Color.white);
        categoryplot.setNoDataMessageFont(new java.awt.Font("MS Sans Serif", 0, 20));
        categoryplot.setNoDataMessage("Sin datos");

        NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();
        barrenderer.setDrawBarOutline(false);

        GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.red, 0.0F, 0.0F, new Color(0, 0, 0));
        GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F, new Color(0, 0, 0));
        GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.YELLOW, 0.0F, 0.0F, new Color(0, 0, 0));
        GradientPaint gradientpaint3 = new GradientPaint(0.0F, 0.0F, Color.orange, 0.0F, 0.0F, new Color(0, 0, 0));

        barrenderer.setSeriesPaint(0, gradientpaint);
        barrenderer.setSeriesPaint(1, gradientpaint1);
        barrenderer.setSeriesPaint(2, gradientpaint2);
        barrenderer.setSeriesPaint(3, gradientpaint3);
        jfreechart.addSubtitle(subtituloAdmon());

        return jfreechart;
    }

    private TextTitle subtituloAdmon() {
        String Admo = Datos.Variables.getVariables().getNombreAdmon();
        TextTitle subtitulo = new TextTitle(Admo);
        subtitulo.setFont(new java.awt.Font("Serif", 0, 13));
        subtitulo.setPosition(RectangleEdge.TOP);
        subtitulo.setVerticalAlignment(VerticalAlignment.CENTER);
        return subtitulo;
    }
}

