/* 
* 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 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 StackedBarRenta {

    public JFreeChart chart;
    int rentas;
    int borradores;

    public StackedBarRenta(String title, JPanel panel, DefaultTableModel modelo) {
        chart = createChart(title, modelo);
        panel.add(new ChartPanel(chart));
        panel.revalidate();
    }

    private CategoryDataset crearDataset(DefaultTableModel modelo) {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        rentas = 0;
        borradores = 0;
        int p = modelo.getRowCount();
        for (int i = 0; i < p; i++) {
            String Serie = "Hora " + modelo.getValueAt(i, 0);
            Number Valor = (Number) modelo.getValueAt(i, 1);
            if (modelo.getValueAt(i, 2).equals("R")) {
                rentas = rentas + Valor.intValue();
                dataset.setValue(new Double(Valor.doubleValue()), "Renta", Serie);
            }
            if (modelo.getValueAt(i, 2).equals("B")) {
                dataset.setValue(new Double(Valor.doubleValue()), "Borrador", Serie);
                borradores = borradores + Valor.intValue();
            }
        }
        return dataset;
    }

    private JFreeChart createChart(String title, DefaultTableModel modelo) {
        CategoryDataset categorydataset = crearDataset(modelo);
        JFreeChart jfreechart = ChartFactory.createStackedBarChart(title, "Citas", "Tipos de Citas", 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: " + (rentas + borradores) + "      Rentas: " + rentas + "      Borradores: " + borradores, 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 plot = (CategoryPlot) jfreechart.getPlot();
        plot.setBackgroundPaint(Color.WHITE);
        plot.setDomainGridlinePaint(Color.white);
        plot.setDomainGridlinesVisible(true);
        plot.setRangeGridlinePaint(Color.white);
        plot.setNoDataMessageFont(new java.awt.Font("MS Sans Serif", 0, 20));
        plot.setNoDataMessage("Sin datos");

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

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

        GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F, new Color(0, 64, 0));
        GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.red, 0.0F, 0.0F, new Color(0, 0, 0));
        barrenderer.setSeriesPaint(0, gradientpaint);
        barrenderer.setSeriesPaint(1, gradientpaint1);

        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;
    }
}

