 package com.softgraf.control;

import static com.softgraf.control.Sistema.dlgConfirma;
import static com.softgraf.control.Sistema.dlgInfo;
import static com.softgraf.control.Sistema.showException;

import java.io.IOException;
import java.net.URL;
import java.util.Optional;

import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ButtonType;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;

public class ControlePrincipal  {
	
	@FXML
	private StackPane stackPane;
	@FXML
	private MenuItem mnuCadastrarCliente, mnuCadastrarFornecedor,
			mnuCadastrarProduto, mnuCadastrarPedido;
	@FXML
	private MenuItem mnuRelatorioClientes, mnuRelatorioFornecedores,
			mnuRelatorioEstoque, mnuRelatorioPedidos;
	@FXML
	private MenuItem mnuSistemaSobre, mnuSistemaSair;
	
	private static StackPane painelPrincipal;
	private static AnchorPane painelAtual = null;
	
	// método especial do javafx
	// este método é executado automaticamente após o construtor
	// da classe, porém somente quando todos os compomentes FX
	// forem carregados na tela gráfica
	public void initialize(){
		painelPrincipal = stackPane;

		mnuCadastrarCliente.setOnAction(e -> cadastrarCliente());
		mnuCadastrarFornecedor.setOnAction(e -> cadastrarFornecedor());
		mnuCadastrarProduto.setOnAction(e -> cadastrarProduto());
		mnuCadastrarPedido.setOnAction(e -> cadastrarPedido());
		
		mnuRelatorioClientes.setOnAction(e -> relatorioClientes());
		mnuRelatorioFornecedores.setOnAction(e -> relatorioFornecedores());
		mnuRelatorioEstoque.setOnAction(e -> relatorioEstoque());
		mnuRelatorioPedidos.setOnAction(e -> relatorioPedidos());
		
		mnuSistemaSobre.setOnAction(e -> sobre());
		mnuSistemaSair.setOnAction(e -> sair());	
	}
	
	// remove o último painel visível e salva o novo
	protected static void atualizaPainelAtual(AnchorPane novoPainel){
		if (painelAtual != null){
			painelPrincipal.getChildren().remove(painelAtual);
		}
		painelAtual = novoPainel;
	}
	
	
	private AnchorPane carregarFXML(String arquivoFXML){
		URL url = this.getClass().getResource(arquivoFXML);
		AnchorPane painel = null;
		try {
			painel = (AnchorPane) FXMLLoader.load(url);
			stackPane.getChildren().add(painel);
			atualizaPainelAtual(painel);
			
		} catch (IOException e) {
			showException("Erro Fatal ao carregar arquivo FXML: \n" + arquivoFXML, e);
			Platform.exit();
		}
				
		return painel;
	}
	
	public void cadastrarCliente(){
		carregarFXML("/com/softgraf/view/PainelCliente.fxml").setStyle("-fx-background-color: lightgray;");
	}
	
	public void cadastrarFornecedor(){
		
	}
	
	public void cadastrarProduto(){
		
	}
	
	public void cadastrarPedido(){
		
	}
	
	public void relatorioClientes(){
		carregarFXML("/com/softgraf/view/PainelRelatorioClientes.fxml");
	}
	
	public void relatorioFornecedores(){
		
	}
	
	public void relatorioEstoque(){
		
	}
	
	public void relatorioPedidos(){
		
	}
	
	public void sobre(){
		dlgInfo.setHeaderText("Sistema de Controle de Farmácias versão 2016");
		dlgInfo.setContentText("Developed by SOFTGRAF CURSOS AVANÇADOS");
		dlgInfo.showAndWait();
	}
	
	public void sair(){
		dlgConfirma.setHeaderText("Quer sair do sistema?");
		dlgConfirma.setContentText("Tem certeza?");
		Optional<ButtonType> resp = dlgConfirma.showAndWait();
		if (resp.get() == ButtonType.OK){
			Principal.fabricaConexoes.fecharConexao(Principal.conexao);
			Principal.palco.close();
		}
	}

}
