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

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

        #region Métodos

        public DataTable SelectOthersTables(entidadeMedidoresUnidadeConsumidora objMedidoresUnidadeConsumidora)
        {
            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 + " MEDIDORES_UNIDADE_CONSUMIDORA.ID                    AS 'CODIGO',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.IDUNIDADE_CONSUMIDORA AS 'COD.UNIDADE CONSUMIDORA',  ";
                    vFILTER = vFILTER + " UNIDADE_CONSUMIDORA.NOME                            AS 'NOME U.C.',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.IDMEDIDOR             AS 'COD.MEDIDOR',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.LANCAMENTO            AS 'LANCAMENTO',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.IDSITUACAO            AS 'COD.SITUACAO',  ";
                    vFILTER = vFILTER + " SITUACAO.DESCRICAO                                  AS 'SITUAÇAO',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.SITUACAO              AS 'ESTADO',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.IDUSUARIOS            AS 'COD.USUARIO',  ";
                    vFILTER = vFILTER + " NSS.USUARIOS.NOME                                   AS 'NOME USUARIO',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.OS_ID                 AS 'COD.ORDEM SERVICO',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.OS_PROTOCOLO          AS 'PROTOCOLO',  ";
                    vFILTER = vFILTER + " MEDIDORES_UNIDADE_CONSUMIDORA.OBSERVACAO            AS 'OBSERVACAO'  ";

                    vINNERJOIN = vINNERJOIN + "     LEFT JOIN NSS.USUARIOS  ";
                    vINNERJOIN = vINNERJOIN + "       ON  NSS.USUARIOS.ID = MEDIDORES_UNIDADE_CONSUMIDORA.IDUSUARIOS  ";
                    vINNERJOIN = vINNERJOIN + "    LEFT JOIN UNIDADE_CONSUMIDORA  ";
                    vINNERJOIN = vINNERJOIN + "      ON  UNIDADE_CONSUMIDORA.ID = MEDIDORES_UNIDADE_CONSUMIDORA.IDUNIDADE_CONSUMIDORA  ";
                    vINNERJOIN = vINNERJOIN + "   LEFT JOIN MEDIDORES  ";
                    vINNERJOIN = vINNERJOIN + "     ON  MEDIDORES.ID = MEDIDORES_UNIDADE_CONSUMIDORA.IDMEDIDOR  ";
                    vINNERJOIN = vINNERJOIN + "  LEFT JOIN SITUACAO  ";
                    vINNERJOIN = vINNERJOIN + "    ON SITUACAO.ID = MEDIDORES_UNIDADE_CONSUMIDORA.IDSITUACAO  ";

                    vORDERBY = " ";

                    vAND = vAND + " AND  MEDIDORES_UNIDADE_CONSUMIDORA.IDMEDIDOR = ?IDMEDIDOR  ";

                    cmd = new MySqlCommand(this.QuerySelect);

                    cmd.Parameters.AddWithValue("?IDMEDIDOR", objMedidoresUnidadeConsumidora.IDMEDIDOR);

                    dt = objGerenciadorTransacao.GetDataTable(cmd);
                }

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

        public DataTable SelectOthersTables_1(entidadeMedidoresUnidadeConsumidora objMedidoresUnidadeConsumidora)
        {
            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 + "MEDIDORES_UNIDADE_CONSUMIDORA.ID,  ";
                    vFILTER = vFILTER + "MEDIDORES_UNIDADE_CONSUMIDORA.IDUNIDADE_CONSUMIDORA,  ";
                    vFILTER = vFILTER + "MEDIDORES_UNIDADE_CONSUMIDORA.IDMEDIDOR,  ";
                    vFILTER = vFILTER + "MEDIDORES_UNIDADE_CONSUMIDORA.LANCAMENTO,  ";
                    vFILTER = vFILTER + "MEDIDORES_UNIDADE_CONSUMIDORA.IDSITUACAO,  ";
                    vFILTER = vFILTER + "SITUACAO.DESCRICAO AS DESCRICAO_SITUACAO,  ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.ID,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.GRUPO,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.CONS_ID,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.UNID_ID,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.ZONA,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.LIVRO,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.CONTA,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.NOME,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.SITUACAO,   ";
                    vFILTER = vFILTER + "UNIDADE_CONSUMIDORA.IDMEDIDOR   ";

                    vINNERJOIN = vINNERJOIN + "  INNER JOIN UNIDADE_CONSUMIDORA  ";
                    vINNERJOIN = vINNERJOIN + "          ON UNIDADE_CONSUMIDORA.ID = MEDIDORES_UNIDADE_CONSUMIDORA.IDUNIDADE_CONSUMIDORA  ";
                    vINNERJOIN = vINNERJOIN + " LEFT JOIN SITUACAO  ";
                    vINNERJOIN = vINNERJOIN + "        ON SITUACAO.ID = MEDIDORES_UNIDADE_CONSUMIDORA.IDSITUACAO  ";


                    vORDERBY = "ORDER BY MEDIDORES_UNIDADE_CONSUMIDORA.ID DESC LIMIT 0,1  ";

                    if (objMedidoresUnidadeConsumidora.IDMEDIDOR != 0)
                    {
                        if (vAND != String.Empty)
                        { vAND = vAND + "AND MEDIDORES_UNIDADE_CONSUMIDORA.IDMEDIDOR = ?IDMEDIDOR "; }
                        else
                        { vAND = "AND MEDIDORES_UNIDADE_CONSUMIDORA.IDMEDIDOR  = ?IDMEDIDOR "; }

                    }
                    else
                    {
                        if (vAND != String.Empty)
                        { vAND = vAND + " "; }
                        else
                        { vAND = " "; }
                    }


                    cmd = new MySqlCommand(this.QuerySelect);

                    if (objMedidoresUnidadeConsumidora.IDMEDIDOR != 0)
                    {
                        cmd.Parameters.AddWithValue("?IDMEDIDOR", objMedidoresUnidadeConsumidora.IDMEDIDOR);
                    }

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

                return sb.ToString();
            }
        }

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

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

                return sb.ToString();
            }
        }

        #endregion


    }
}
