package com.softgraf.vendas.model.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import com.softgraf.vendas.model.dao.abstrato.AbstractGenericDAO;
import com.softgraf.vendas.model.pojo.Item;

public class ItemDAO extends AbstractGenericDAO<Item> {

	public ItemDAO(Conexao conexao) {
		super(conexao);
	}

	@Override
	public void criarTabela() {
		String sql = "CREATE TABLE IF NOT EXISTS Item (" +
					  "quantidade INT UNSIGNED NOT NULL, " +
					  "Pedido_id INT NOT NULL, " +
					  "Produto_id INT NOT NULL," +
					  "FOREIGN KEY (Pedido_id) REFERENCES Pedido(id), " +
					  "FOREIGN KEY (Produto_id) REFERENCES Produto(id))";
		
		try {
			Statement cmd = dbConnection.createStatement();
			cmd.executeUpdate(sql);
			cmd.close();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public boolean inserir(Item item) {
		String sql = "INSERT INTO Item (Pedido_id, Produto_id, quantidade) VALUES (?, ?, ?)";

		try {
			PreparedStatement cmd = dbConnection.prepareStatement(sql);
			cmd.setInt(1, item.getPedido().getId());
			cmd.setInt(2, item.getProduto().getId());
			cmd.setInt(3,  item.getQuantidade());
			int retorno = cmd.executeUpdate();
			cmd.close();

			return retorno > 0;

		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
	}

	@Override	
	public boolean apagar(Item item){
		String sql = "DELETE FROM Item WHERE Pedido_id=? AND Produto_id=?";
		
		try {
			PreparedStatement cmd = dbConnection.prepareStatement(sql);
			cmd.setInt(1, item.getPedido().getId());
			cmd.setInt(2, item.getProduto().getId());
			int retorno = cmd.executeUpdate();
			cmd.close();
			return retorno > 0;
			
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
	}

	@Override
	public boolean atualizar(Item item) {
		String sql = "UPDATE Item SET quantidade=? WHERE Pedido_id=? AND Produto_id=?";
		
		try {
			PreparedStatement cmd = dbConnection.prepareStatement(sql);
			cmd.setInt(1, item.getQuantidade());
			cmd.setInt(2, item.getPedido().getId());
			cmd.setInt(3,  item.getProduto().getId());
			int retorno = cmd.executeUpdate();
			cmd.close();
			return retorno > 0;
				
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}	
	}

	@Override
	public Item buscar(Integer id) {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public Item buscar(Item item) {
		String sql = "SELECT * FROM Item WHERE Pedido_id=? AND Produto_id=?";

		try {
			PreparedStatement cmd = dbConnection.prepareStatement(sql);
			cmd.setInt(1, item.getPedido().getId());
			cmd.setInt(2, item.getProduto().getId());
			ResultSet rs = cmd.executeQuery();

			if (rs.next()) {
				int qtde = Integer.parseInt(rs.getString("quantidade"));
				item.setQuantidade(qtde);
			} else
				item = null;

			cmd.close();

		} catch (SQLException e) {
			e.printStackTrace();
			item = null;
		}

		return item;	
	}

	@Override
	public Item buscar(String campo) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Item> listar() {
		// TODO Auto-generated method stub
		return null;
	}


}
