package com.softgraf.model.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import com.softgraf.model.abstrato.AbstractGenericDAO;
import com.softgraf.model.vo.Finalidade;

// 17
public class FinalidadeDAO extends AbstractGenericDAO<Finalidade>{

	private Connection conexao;
	private PreparedStatement pst;  // executor de comandos
	private String sql;
	
	public FinalidadeDAO(Connection conexao) {
		this.conexao = conexao;
	}
	
	
	@Override
	public boolean inserir(Finalidade finalidade) {
		int retorno = 0;
		sql = "INSERT INTO finalidade (descricao) VALUES (?)";
		
		try {
			pst = conexao.prepareStatement(sql);
			pst.setString(1,  finalidade.getDescricao());
			retorno = pst.executeUpdate();
			pst.close();
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro de sentença SQL ao inserir finalidade.");
		}
		
		return retorno > 0;
	}

	@Override
	public boolean remover(int pk) {
		int retorno = 0;
		sql = "DELETE FROM finalidade WHERE id_finalidade=?";
		
		try {
			pst = conexao.prepareStatement(sql);
			pst.setInt(1, pk);
			retorno = pst.executeUpdate();
			pst.close();
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro de sentença SQL ao remover finalidade");
		}
		
		return retorno > 0;
	}

	@Override
	public boolean atualizar(int pk, Finalidade finalidade) {
		int retorno = 0;
		sql = "UPDATE finalidade SET descricao=? WHERE id_finalidade=?";
		
		try {
			pst = conexao.prepareStatement(sql);
			pst.setString(1, finalidade.getDescricao());
			pst.setInt(2, pk);
			retorno = pst.executeUpdate();
			pst.close();
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro de sentença SQL ao atualizar finalidade.");
		} 
		
		return retorno > 0;
	}

	@Override
	public ArrayList<Finalidade> listar() {
		ArrayList<Finalidade> listaFinalidades = new ArrayList<Finalidade>();
		Finalidade finalidade;
		Integer id_finalidade;
		String descricao;
		sql = "SELECT * FROM finalidade";
		
		try {
			pst = conexao.prepareStatement(sql);
			ResultSet rs = pst.executeQuery();
			
			while (rs.next()){
				id_finalidade = rs.getInt("id_finalidade");
				descricao = rs.getString("descricao");
				
				finalidade = new Finalidade(descricao);
				finalidade.setIdFinalidade(id_finalidade);
				listaFinalidades.add(finalidade);
			}
			
			pst.close();
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro de sentença SQL ao listar finalidade.");
		}
		
		return !listaFinalidades.isEmpty() ? listaFinalidades : null;
	}

	@Override
	public Finalidade buscar(int pk) {
		Finalidade finalidade = null;
		sql = "SELECT * FROM finalidade WHERE id_finalidade=?";
		
		try {
			pst = conexao.prepareStatement(sql);
			pst.setInt(1, pk);
			ResultSet rs = pst.executeQuery();
			
			if (rs.next()){
				String descricao = rs.getString("descricao");
				finalidade = new Finalidade(descricao);
				finalidade.setIdFinalidade(pk);
				pst.close();
			}
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro na sentença SQL ao buscar finalidade.");
		}
		
		return finalidade;
	}

}
