package com.softgraf.vendas.view;

import com.softgraf.vendas.model.dao.Conexao;
import com.softgraf.vendas.model.dao.Consultas;

import javafx.collections.ObservableList;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.layout.BorderPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class GraficosView {

	private Conexao conexao;
	
	public GraficosView(Conexao conexao) {
		this.conexao = conexao;
	}
	
	private void gerarGrafico(ObservableList<Data> listaDados, String tituloPieChart, String
								tituloStage) {
		
		PieChart grafico = new PieChart(listaDados);
		grafico.setLegendSide(Side.LEFT);
		grafico.setTitle(tituloPieChart);
		
		double soma = 0.0;
		final double total;
		
		for (PieChart.Data dados : grafico.getData()) {
			soma += dados.getPieValue();
		}
		
		total = soma;
		
		for (PieChart.Data dados : grafico.getData()) {
			dados.getNode().setOnMouseClicked(e ->
				grafico.setTitle(String.format("%s: %.1f %%", dados.getName(),
						dados.getPieValue() / total * 100)));
		}
		
		
		BorderPane painel = new BorderPane(grafico);
		Scene cena = new Scene(painel, 600, 400);
		Stage stage = new Stage();
		stage.setScene(cena);
		stage.initModality(Modality.APPLICATION_MODAL);
		stage.showAndWait();
	}
	
	public void clientesPorCidade() {
		gerarGrafico(Consultas.clientesPorCidade(conexao), "Clique sobre a cidade!",
				"Concentração de clientes por cidade");
	}
	
	public void clientesPorEstado() {
		gerarGrafico(Consultas.clientesPorEstado(conexao), "Clique sobre o estado!", "Concentração de clientes por estado");
	}
}
