package com.softgraf.model.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

// 14
// Cria as tabelas do banco de dados, através de instruções do MySQL
public class TabelasFinanceiroDAO {

	private Connection conexao;
	private PreparedStatement pst;  // executor de comandos
	private String sql;
	
	// construtor
	public TabelasFinanceiroDAO(Connection conexao) {
		this.conexao = conexao;
	}
	
	public boolean criarTabelaBanco() {
		// prepara instrução sql (MySQL)
		sql = new StringBuilder()
			.append("CREATE TABLE IF NOT EXISTS financeiro.banco (")
			.append("banco INT NOT NULL PRIMARY KEY UNIQUE,")
			.append("nomeBanco VARCHAR(40) NOT NULL")
			.append(");")
			.toString();
		
		try {
			// compila a instrução sql
			pst = conexao.prepareStatement(sql);
			// cria a tabela
			pst.executeUpdate();
			
		} catch (SQLException e) {
			return false;
		}
		
		return true;
	}

	public boolean criarTabelaAgencia() {
		sql = new StringBuilder()
				.append("CREATE TABLE IF NOT EXISTS financeiro.agencia (")
				.append("id_agencia INT NOT NULL AUTO_INCREMENT PRIMARY KEY,")
				.append("agencia INT NOT NULL,")
				.append("banco INT NOT NULL,")
				.append("nomeAgencia VARCHAR(20),")
				.append("endereco VARCHAR(30),")
				.append("bairro VARCHAR(20),")
				.append("cidade VARCHAR(20),")
				.append("uf CHAR(2),")
				.append("fone CHAR(14),")
				.append("FOREIGN KEY (banco) REFERENCES banco(banco)")
				.append(");")
				.toString();
		
		try {
			PreparedStatement pst = conexao.prepareStatement(sql);
			pst.executeUpdate();
			
		} catch (SQLException e) {
			return false;
		}
		
		return true;
	}


	public boolean criarTabelaFinalidade() {
		sql = new StringBuilder()
			.append("CREATE TABLE IF NOT EXISTS financeiro.finalidade (")
			.append("id_finalidade INT NOT NULL AUTO_INCREMENT PRIMARY KEY,")	
			.append("descricao VARCHAR(30) NOT NULL")
			.append(");")
			.toString();

		try {
			PreparedStatement pst = conexao.prepareStatement(sql);
			pst.executeUpdate();

		} catch (SQLException e) {
			return false;
		}

		return true;
	}
	
	public boolean criarTabelaCliente() {
		sql = new StringBuilder()
			.append("CREATE TABLE IF NOT EXISTS financeiro.cliente (")
			.append("id_cliente INT NOT NULL AUTO_INCREMENT PRIMARY KEY,")
			.append("pessoa BIT NOT NULL,")
			.append("nome VARCHAR(40) NOT NULL,")
			.append("assinatura VARCHAR(40),")
			.append("cpf_cnpj VARCHAR(20) NOT NULL,")
			.append("rg VARCHAR(20),")
			.append("fone1 CHAR(14) NOT NULL,")
			.append("fone2 CHAR(14),")
			.append("fone3 CHAR(14),")
			.append("email VARCHAR(30),")
			.append("endereco VARCHAR(30),")
			.append("bairro VARCHAR(20),")
			.append("cidade VARCHAR(20),")
			.append("uf CHAR(2)")
			.append(");")
			.toString();

		try {
			PreparedStatement pst = conexao.prepareStatement(sql);
			pst.executeUpdate();
	
		} catch (SQLException e) {
			return false;
		}

		return true;
	}

	public boolean criarTabelaCheque() {
		sql = new StringBuilder()
			.append("CREATE TABLE IF NOT EXISTS financeiro.cheque (")
			.append("id_cheque INT NOT NULL AUTO_INCREMENT PRIMARY KEY,")	
			.append("id_agencia INT NOT NULL,")
			.append("numConta INT NOT NULL,")
			.append("numCheque INT NOT NULL,")
			.append("valor FLOAT NOT NULL,")
			.append("id_cliente INT NOT NULL,")
			.append("dataDesde DATE NOT NULL,")
			.append("dataEmissao DATE NOT NULL,")
			.append("dataBomPara DATE NOT NULL,")
			.append("historico INT NOT NULL,")
			.append("totalFolhas INT NOT NULL,")
			.append("numFolha INT NOT NULL,")
			.append("uso BIT NOT NULL,")
			.append("id_finalidade INT NOT NULL,")
			.append("FOREIGN KEY (id_agencia) REFERENCES agencia(id_agencia),")
			.append("FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente),")
			.append("FOREIGN KEY (id_finalidade) REFERENCES finalidade(id_finalidade)")
			.append(");")
			.toString();

		try {
			PreparedStatement pst = conexao.prepareStatement(sql);
			pst.executeUpdate();

		} catch (SQLException e) {
			return false;
		}

		return true;
	}

}
