package com.softgraf.vendas.control;

import java.util.Optional;

import com.softgraf.vendas.model.dao.abstrato.AbstractGenericDAO;
import com.softgraf.vendas.view.TableViewHelper;

import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Control;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

abstract public class AbstractController<G> {

	abstract public void initialize();

	abstract protected void preencherCampos(G pojo);
	
	abstract public void acaoNovo();
	
	abstract public void acaoSalvarAtualizar();
	
	protected void limparCampos(Control ... componentes){
		staticLimparCampos(componentes);
	}
	
	static protected void staticLimparCampos(Control ... componentes){
	   for (Control c : componentes) {
	      if (c instanceof TextField)
		     ((TextField) c).clear();
		  else if (c instanceof ComboBox<?>)
		     ((ComboBox<?>) c).setValue(null);
		  else if (c instanceof DatePicker)
			  ((DatePicker) c).setValue(null);
	   }
	}
	

	protected void excluir(AbstractGenericDAO<G> dao, String id, Label lblMensagem, TableViewHelper<G> tableViewHelper){
		exclusao(dao, id, lblMensagem, tableViewHelper);
	}
	
	static protected <T> void exclusao(AbstractGenericDAO<T> dao, String id, Label lblMensagem, TableViewHelper<T> tableViewHelper){
		T pojo = dao.buscar(Integer.parseInt(id));
		Alert alerta = new Alert(AlertType.CONFIRMATION);
		alerta.setTitle("Confirmação de EXCLUSÃO");
		alerta.setHeaderText("Você quer mesmo excluir o item ID=" + id + "?");
		alerta.setContentText("Este item será excluido do banco de dados!\nVocê tem certeza?");
		Optional<ButtonType> escolha = alerta.showAndWait();
		if (escolha.get() == ButtonType.OK){
			boolean apagado = dao.apagar(pojo);
			if (apagado){
				lblMensagem.setText("O item selecionado foi removido do Banco de Dados!");
				tableViewHelper.atualizarDados();
			} else
				lblMensagem.setText("Não foi possível excluir o item selecionado do banco de dados.");
		}
	}
	
}
