package com.softgraf.vendas.control;

import com.softgraf.vendas.model.dao.ProdutoDAO;
import com.softgraf.vendas.model.pojo.Produto;
import com.softgraf.vendas.view.TableViewHelper;

import javafx.beans.property.StringProperty;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;

public class ControleProduto extends AbstractController<Produto>{

	@FXML private TextField txtId, txtNome, txtPreco;
	@FXML private Label lblMensagem;
	private ProdutoDAO produtoDAO = null;
	@FXML private TableView<ObservableList<StringProperty>> produtoTableView;
	private TableViewHelper<Produto> tableViewHelper;
	
	// evento de inicializaÃ§Ã£o da tela
	// este mÃ©todo Ã© chamado assim que a tela estÃ¡ pronta para ser exibida
	@FXML
	@Override
	public void initialize() {
		produtoDAO = VendasPrincipal.getProdutoDAO();
		
		String sqlSelect = "SELECT p.ID as Código, p.Nome, p.Preco FROM Produto AS p";
		tableViewHelper = new TableViewHelper<>(produtoTableView, produtoDAO, sqlSelect);
		
		produtoTableView.setOnMouseClicked(e -> {
			String id = tableViewHelper.getValorSelecionado(0);
			if (id != null) {
				if (e.getClickCount() == 1)
					preencherCampos(produtoDAO.buscar(Integer.parseInt(id)));
				else  // duplo clique
					excluir(produtoDAO, id, lblMensagem, tableViewHelper);
			}
		});
	}
	
	@Override
	protected void preencherCampos(Produto p){
		txtId.setText(p.getId().toString());
		txtNome.setText(p.getNome());
		txtPreco.setText(p.getPreco().toString());
	}
	
	@Override
	public void acaoNovo(){
		super.limparCampos(txtId, txtNome,txtPreco);
	}
	
	@Override
	public void acaoSalvarAtualizar() {
		Produto produto = null;
		boolean sucesso = false;
		
		String nome = txtNome.getText();
		Float preco = Float.parseFloat(txtPreco.getText());
		
		if (!txtId.getText().isEmpty()) {
			Integer id = Integer.parseInt(txtId.getText());
			produto = produtoDAO.buscar(id);
		}
		
		// atualiza produto existente
		if (produto != null){
			produto.setNome(nome);
			produto.setPreco(preco);
			sucesso = produtoDAO.atualizar(produto);
			
		// salva produto novo
		} else {
			produto = new Produto(null, nome, preco);
			sucesso = produtoDAO.inserir(produto);
		}
		
		if (sucesso) {
			txtId.setText(produto.getId().toString());
			tableViewHelper.atualizarDados();
			lblMensagem.setText("Dados salvos/atualizados com sucesso!");
		} else
			lblMensagem.setText("Erro ao salvar/atualizar");
	}
}
