using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data.MySqlClient;
using fatd_faturamento.ENTIDADE;
using fatd_faturamento.DAL.Conexao;

namespace fatd_faturamento.DAL.Persistencia
{
    public class dalCaduniDados
    {
        string vFILTER = null;
        string vINNERJOIN = null;
        string vAND = null;
        string vORDERBY = null;

        #region Métodos

        public DataTable Select(entidadeCaduniDados objCaduniDados)
        {
            DataTable dt = null;
            MySqlCommand cmd = null;
            IGerenciadorTransacao objGerenciadorTransacao = null;
            ConexaoBD objconexaoBD = null;


            try
            {
                objconexaoBD = new ConexaoBD();

                objconexaoBD.SetarConexaoBanco(TipoBDConexao.fat_BD);

                using (objGerenciadorTransacao = FabricaGerenciadorTransacao.GetGerenciador(TipoBDGerenciador.MySql))
                {

                    vFILTER = vFILTER + "ID, ";
                    vFILTER = vFILTER + "ANO, ";
                    vFILTER = vFILTER + "ANO_MES, ";
                    vFILTER = vFILTER + "IDAGENTE, ";
                    vFILTER = vFILTER + "COD_FAMILIAR_FAM, ";
                    vFILTER = vFILTER + "NIS, ";
                    vFILTER = vFILTER + "NB, ";
                    vFILTER = vFILTER + "COD_UC, ";
                    vFILTER = vFILTER + "CD_IBGE, ";
                    vFILTER = vFILTER + "DATA_ATUALIZACAO_FAM, ";
                    vFILTER = vFILTER + "VLR_RENDA_PERCAPITA_FAM, ";
                    vFILTER = vFILTER + "VLR_RENDA_TOTAL_FAM, ";
                    vFILTER = vFILTER + "COD_FAMILIA_INDIGENA_FAM, ";
                    vFILTER = vFILTER + "IND_FAMILIA_QUILOMBOLA_FAM, ";
                    vFILTER = vFILTER + "CD_IBGE_DIST, ";
                    vFILTER = vFILTER + "CD_IBGE_BPC, ";
                    vFILTER = vFILTER + "ESPECIE, ";
                    vFILTER = vFILTER + "DESCRICAO_ESPECIE, ";
                    vFILTER = vFILTER + "SITUACAO, ";
                    vFILTER = vFILTER + "SUBCLASSE, ";
                    vFILTER = vFILTER + "DESCRICAO_SUBCLASSE, ";
                    vFILTER = vFILTER + "USA_APARELHO, ";
                    vFILTER = vFILTER + "ID_CADUNI_GRUPOS, ";
                    vFILTER = vFILTER + "DESCRICAO_CADUNI_GRUPOS, ";
                    vFILTER = vFILTER + "MARC_TSEE, ";
                    vFILTER = vFILTER + "ID_CADUNI_MOTIVOS_VALIDACOES, ";
                    vFILTER = vFILTER + "DESCRICAO_CADUNI_MOTIVOS_VALIDACOES, ";
                    vFILTER = vFILTER + "DATA_INICIO_MENSAGEM, ";
                    vFILTER = vFILTER + "DATA_LIMITE_ATUALIZACAO, ";
                    vFILTER = vFILTER + "ID_CADUNI_ESTADOS_CADASTRAIS, ";
                    vFILTER = vFILTER + "DESCRICAO_CADUNI_ESTADOS_CADASTRAIS, ";
                    vFILTER = vFILTER + "ZONA, ";
                    vFILTER = vFILTER + "LIVRO, ";
                    vFILTER = vFILTER + "CONTA, ";
                    vFILTER = vFILTER + "ATIVO, ";
                    vFILTER = vFILTER + "DESATIVAR, ";
                    vFILTER = vFILTER + "VALIDO ";

                    vINNERJOIN = " ";

                    vORDERBY = "ORDER BY ANO_MES DESC ";

                    vAND = vAND + "AND ANO_MES <= ?ANO_MES ";
                    vAND = vAND + "AND ZONA = ?ZONA ";
                    vAND = vAND + "AND LIVRO = ?LIVRO ";
                    vAND = vAND + "AND CONTA = ?CONTA ";
                    vAND = vAND + "AND DATA_LIMITE_ATUALIZACAO >= ?DATA_LIMITE_ATUALIZACAO ";


                    cmd = new MySqlCommand(this.QuerySelect);

                
                        cmd.Parameters.AddWithValue("?ANO_MES", objCaduniDados.ANO_MES);
                    cmd.Parameters.AddWithValue("?ZONA", objCaduniDados.ZONA.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?LIVRO", objCaduniDados.LIVRO.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?CONTA", objCaduniDados.CONTA.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?DATA_LIMITE_ATUALIZACAO", objCaduniDados.DATA_LIMITE_ATUALIZACAO);


                    dt = objGerenciadorTransacao.GetDataTable(cmd);
                }

                return dt;
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cmd != null)
                    cmd.Dispose();
            }
        }

        #endregion

        #region " Comandos SQL "

        StringBuilder sb = new StringBuilder();


        protected string QueryInsert
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine("INSERT INTO  ");
                this.sb.AppendLine("CADUNI_DADOS SET  ");
                this.sb.AppendLine(vFILTER);

                return sb.ToString();
            }
        }

        protected string QueryUpdate
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine("UPDATE  ");
                this.sb.AppendLine("CADUNI_DADOS SET  ");
                this.sb.AppendLine(vFILTER);
                this.sb.AppendLine("WHERE 1 = 1 ");
                this.sb.AppendLine(vAND);

                return sb.ToString();
            }
        }

        protected string QueryDelete
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine("DELETE FROM CADUNI_DADOS ");
                this.sb.AppendLine("WHERE 1 = 1 ");
                this.sb.AppendLine(vAND);
                this.sb.AppendLine(vORDERBY);

                return sb.ToString();
            }
        }

        protected string QuerySelect
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine("SELECT ");
                this.sb.AppendLine(vFILTER);
                this.sb.AppendLine("FROM ");
                this.sb.AppendLine("CADUNI_DADOS  ");
                this.sb.AppendLine(vINNERJOIN);
                this.sb.AppendLine("WHERE 1 = 1  ");
                this.sb.AppendLine(vAND);
                this.sb.AppendLine(vORDERBY);

                return sb.ToString();
            }
        }

        #endregion


    }
}
