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 dalCip
    {

        string vFILTER = null;
        string vINNERJOIN = null;
        string vAND = null;
        string vORDERBY = null;

        #region Métodos

        public DataTable Select(entidadeCip objCip)
        {
            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 + "CIDADE , ";
                    vFILTER = vFILTER + "CLASSE , ";
                    vFILTER = vFILTER + "FAIXA_INI , ";
                    vFILTER = vFILTER + "FAIXA_FIM , ";
                    vFILTER = vFILTER + "TIPO , ";
                    vFILTER = vFILTER + "VALOR , ";
                    vFILTER = vFILTER + "DATA , ";
                    vFILTER = vFILTER + "TPCONS , ";
                    vFILTER = vFILTER + "TPFAIXA , ";
                    vFILTER = vFILTER + "REGRA_CONSUMO_MAIOR_LIMITE , ";
                    vFILTER = vFILTER + "REGRA_CONSUMO_MENOR_IGUAL_LIMITE , ";
                    vFILTER = vFILTER + "VALOR_TETO_FIXO , ";
                    vFILTER = vFILTER + "TARIFA_RESIDENCIAL , ";
                    vFILTER = vFILTER + "VALOR_CONSUMO , ";
                    vFILTER = vFILTER + "BAIXA_RENDA , ";
                    vFILTER = vFILTER + "GRUPO , ";
                    vFILTER = vFILTER + "BASE_TARIFA_B4 ";

                    vINNERJOIN = vINNERJOIN + " ";

                    vORDERBY = "LIMIT 1 ";

                    vAND = vAND + "AND CIDADE = ?CIDADE ";
                    vAND = vAND + "AND CLASSE = ?CLASSE ";
                    vAND = vAND + "AND FAIXA_INI <= ?FAIXA_INI ";
                    vAND = vAND + "AND FAIXA_FIM >= ?FAIXA_FIM ";

                    cmd = new MySqlCommand(this.QuerySelect);

                    cmd.Parameters.AddWithValue("?CIDADE", objCip.CIDADE);
                    cmd.Parameters.AddWithValue("?CLASSE", objCip.CLASSE);
                    cmd.Parameters.AddWithValue("?FAIXA_INI", objCip.FAIXA_INI);
                    cmd.Parameters.AddWithValue("?FAIXA_FIM", objCip.FAIXA_FIM);

                    dt = objGerenciadorTransacao.GetDataTable(cmd);
                }

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

        public DataTable Select_1(entidadeCip objCip)
        {
            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 + "CIDADE , ";
                    vFILTER = vFILTER + "CLASSE , ";
                    vFILTER = vFILTER + "FAIXA_INI , ";
                    vFILTER = vFILTER + "FAIXA_FIM , ";
                    vFILTER = vFILTER + "TIPO , ";
                    vFILTER = vFILTER + "VALOR , ";
                    vFILTER = vFILTER + "DATA , ";
                    vFILTER = vFILTER + "TPCONS , ";
                    vFILTER = vFILTER + "TPFAIXA , ";
                    vFILTER = vFILTER + "REGRA_CONSUMO_MAIOR_LIMITE , ";
                    vFILTER = vFILTER + "REGRA_CONSUMO_MENOR_IGUAL_LIMITE , ";
                    vFILTER = vFILTER + "VALOR_TETO_FIXO , ";
                    vFILTER = vFILTER + "TARIFA_RESIDENCIAL , ";
                    vFILTER = vFILTER + "VALOR_CONSUMO , ";
                    vFILTER = vFILTER + "BAIXA_RENDA , ";
                    vFILTER = vFILTER + "GRUPO , ";
                    vFILTER = vFILTER + "BASE_TARIFA_B4 ";

                    vINNERJOIN = vINNERJOIN + " ";

                    vORDERBY = "ORDER BY DATA DESC LIMIT 0, 1 ";

                    vAND = vAND + "AND CIDADE = ?CIDADE ";
                    vAND = vAND + "AND CLASSE = ?CLASSE ";
                    vAND = vAND + "AND ?FAIXA_INI BETWEEN FAIXA_INI AND FAIXA_FIM ";
                    vAND = vAND + "AND DATA <= ?DATA ";

                    cmd = new MySqlCommand(this.QuerySelect);

                    cmd.Parameters.AddWithValue("?CIDADE", objCip.CIDADE);
                    cmd.Parameters.AddWithValue("?CLASSE", objCip.CLASSE);
                    cmd.Parameters.AddWithValue("?FAIXA_INI", objCip.FAIXA_INI);
                    cmd.Parameters.AddWithValue("?DATA", objCip.DATA);

                    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("CIP SET  ");
                this.sb.AppendLine(vFILTER);

                return sb.ToString();
            }
        }

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

                this.sb.AppendLine("UPDATE  ");
                this.sb.AppendLine("CIP 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 CIP ");
                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("CIP  ");
                this.sb.AppendLine(vINNERJOIN);
                this.sb.AppendLine("WHERE 1 = 1  ");
                this.sb.AppendLine(vAND);
                this.sb.AppendLine(vORDERBY);

                return sb.ToString();
            }
        }

        #endregion

    }
}
