package com.softgraf.vendas.control;

import java.util.Arrays;
import java.util.List;

import com.softgraf.vendas.model.entity.Produto;
import com.softgraf.vendas.model.repositorio.RepositorioProduto;
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;
	@FXML private TableView<ObservableList<StringProperty>> produtoTableView;
	private TableViewHelper<Produto> tableViewHelper;
	private RepositorioProduto repositorioProduto = null;
	
	@FXML
	@Override
	public void initialize() {
		repositorioProduto = VendasPrincipal.getRepositorioProduto();
		
		List<String> colunas = Arrays.asList("ID", "Nome", "Preço");
		tableViewHelper = new TableViewHelper<>(produtoTableView, repositorioProduto, colunas);
		
		produtoTableView.setOnMouseClicked(e -> {
			String id = tableViewHelper.getValorSelecionado(0);
			if (id != null) {
				if (e.getClickCount() == 1)
					preencherCampos(repositorioProduto.buscarPorId(id));
				else {  // duplo clique
					excluir(repositorioProduto, id, lblMensagem, tableViewHelper);
					acaoNovo();
				}
			}
		});
	}
	
	@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 = repositorioProduto.buscarPorId(id);
		}
		
		// atualiza produto existente
		if (produto != null){
			produto.setNome(nome);
			produto.setPreco(preco);
			sucesso = repositorioProduto.atualizar(produto);
			
		// salva produto novo
		} else {
			produto = new Produto(null, nome, preco);
			sucesso = repositorioProduto.adicionar(produto);
		}
		
		if (sucesso) {
			txtId.setText(produto.getId().toString());
			tableViewHelper.atualizarDados();
			lblMensagem.setText("Dados salvos/atualizados com sucesso!");
		} else
			lblMensagem.setText("Erro ao salvar/atualizar");
	}
}
