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.Banco;

// 15
public class BancoDAO extends AbstractGenericDAO<Banco> {

	private Connection conexao;
	private PreparedStatement pst;  // executor de comandos
	private String sql;
	
	public BancoDAO(Connection conexao) {
		this.conexao = conexao;
	}
	
	@Override
	public boolean inserir(Banco banco) {
		int retorno = 0;
		sql = "INSERT INTO banco (banco, nomeBanco) VALUES (?, ?)";
		
		try {
			pst = conexao.prepareStatement(sql);
			pst.setInt(1,  banco.getBanco());
			pst.setString(2, banco.getNomeBanco());
			retorno = pst.executeUpdate();
			pst.close();
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro de sentença SQL ao inserir banco");
		}
			
		return retorno > 0;
	}

	@Override
	public boolean remover(int pk) {
		int retorno = 0;
		sql = "DELETE FROM banco WHERE banco=?";
		
		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 banco.");
		}
		
		return retorno > 0;
	}

	@Override
	public boolean atualizar(int pk, Banco banco) {
		int retorno = 0;
		sql = "UPDATE banco SET nomeBanco=? WHERE banco=?";
		
		try {
			pst = conexao.prepareStatement(sql);
			pst.setString(1, banco.getNomeBanco());
			pst.setInt(2,  pk);
			retorno = pst.executeUpdate();
			pst.close();
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro de sentença SQL ao atualizar banco.");
		}
		
		return retorno > 0;
	}

	@Override
	public ArrayList<Banco> listar() {
		ArrayList<Banco> listabBancos = new ArrayList<Banco>();
		Banco banco;
		int b;
		String nomeBanco;
		sql = "SELECT * FROM banco";
		
		try {
			pst = conexao.prepareStatement(sql);
			ResultSet rs = pst.executeQuery();
			
			while (rs.next()){
				b = rs.getInt("banco");
				nomeBanco = rs.getString("nomeBanco");
				
				banco = new Banco(b, nomeBanco);
				listabBancos.add(banco);
			}
			
			pst.clearBatch();
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro de sentença SQL ao listar banco.");
		}
		
		return !listabBancos.isEmpty() ? listabBancos : null;
	}

	@Override
	public Banco buscar(int pk) {
		Banco banco = null;
		sql = "SELECT * FROM banco WHERE banco=?";
		
		try {
			pst = conexao.prepareStatement(sql);
			pst.setInt(1, pk);
			ResultSet rs = pst.executeQuery();
			
			if (rs.next()){
				String nomeBanco = rs.getString("nomeBanco");
				banco = new Banco(pk, nomeBanco);
			}
			
			pst.close();
			
		} catch (SQLException e){
			JOptionPane.showMessageDialog(null, "Erro na sentença SQL ao buscar banco.");
		}
		
		return banco;
	}

}
