package com.softgraf.vendas.control;

import com.softgraf.vendas.model.dao.EnderecoDAO;
import com.softgraf.vendas.model.pojo.Endereco;
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 ControleEndereco extends AbstractController<Endereco>{

	// injeção de dependência
	@FXML private TextField txtId, txtRua, txtCidade, txtEstado;
	@FXML private Label lblMensagem;
	private EnderecoDAO enderecoDAO = null;
	@FXML private TableView<ObservableList<StringProperty>> enderecoTableView;
	private TableViewHelper<Endereco> 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() {
		enderecoDAO = VendasPrincipal.getEnderecoDAO();
		
		String sqlSelect = "SELECT ID, Rua, Cidade, Estado FROM Endereco";
		tableViewHelper = new TableViewHelper<>(enderecoTableView, enderecoDAO, sqlSelect);
		
		enderecoTableView.setOnMouseClicked(e -> {
			String id = tableViewHelper.getValorSelecionado(0);
			if (id != null) {
				if (e.getClickCount() == 1)
					preencherCampos(enderecoDAO.buscar(Integer.parseInt(id)));
				else  // duplo clique
					excluir(enderecoDAO, id, lblMensagem, tableViewHelper);
			}
		});
	}
	
	@Override
	protected void preencherCampos(Endereco e){
		txtId.setText(e.getId().toString());
		txtRua.setText(e.getRua());
		txtCidade.setText(e.getCidade());
		txtEstado.setText(e.getEstado());
	}
	
	@Override
	public void acaoNovo(){
		super.limparCampos(txtId, txtRua, txtCidade, txtEstado);
	}

	@Override
	public void acaoSalvarAtualizar() {
		Endereco endereco = null;
		boolean sucesso = false;

		String rua = txtRua.getText();
		String cidade = txtCidade.getText();
		String estado = txtEstado.getText();
		
		if (!txtId.getText().isEmpty()) {
			Integer id = Integer.parseInt(txtId.getText());
			endereco = enderecoDAO.buscar(id);
		}
		
		// atualiza endereço existente
		if (endereco != null){
			endereco.setRua(rua);
			endereco.setCidade(cidade);
			endereco.setEstado(estado);
			sucesso = enderecoDAO.atualizar(endereco);
			
		// salva endereço novo
		} else {
			endereco = new Endereco(null, rua, cidade, estado);
			sucesso = enderecoDAO.inserir(endereco);
		}
		
		if (sucesso) {
			txtId.setText(endereco.getId().toString());
			tableViewHelper.atualizarDados();
			lblMensagem.setText("Dados salvos/atualizados com sucesso!");
		} else
			lblMensagem.setText("Erro ao salvar/atualizar");
	}
}
