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

namespace fatd_faturamento.DAL.Persistencia
{
    public class dalEnvioEmailFaturas
    {

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

        #region Métodos

        public void Insert(entidadeEnvioEmailFaturas objEnvioEmailFaturas)
        {
            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 + "NUMNF =  ?NUMNF, ";
                    vFILTER = vFILTER + "ZONA = ?ZONA, ";
                    vFILTER = vFILTER + "LIVRO = ?LIVRO,  ";
                    vFILTER = vFILTER + "CONTA = ?CONTA,  ";
                    vFILTER = vFILTER + "DATAENVIO = ?DATAENVIO,  ";
                    vFILTER = vFILTER + "ROTA = ?ROTA,  ";
                    vFILTER = vFILTER + "EMAIL = ?EMAIL,  ";
                    vFILTER = vFILTER + "ENVIOEMAIL = ?ENVIOEMAIL  ";

                    cmd = new MySqlCommand(this.QueryInsert);

                    cmd.Parameters.AddWithValue("?NUMNF", objEnvioEmailFaturas.NUMNF);
                    cmd.Parameters.AddWithValue("?ZONA", objEnvioEmailFaturas.ZONA);
                    cmd.Parameters.AddWithValue("?LIVRO", objEnvioEmailFaturas.LIVRO);
                    cmd.Parameters.AddWithValue("?CONTA", objEnvioEmailFaturas.CONTA);
                    cmd.Parameters.AddWithValue("?DATAENVIO", objEnvioEmailFaturas.DATAENVIO);
                    cmd.Parameters.AddWithValue("?ROTA", objEnvioEmailFaturas.ROTA.ToUpper());
                    cmd.Parameters.AddWithValue("?EMAIL", objEnvioEmailFaturas.EMAIL.ToUpper());
                    cmd.Parameters.AddWithValue("?ENVIOEMAIL", objEnvioEmailFaturas.ENVIOEMAIL);


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

        public DataTable Select(entidadeEnvioEmailFaturas objEnvioEmailFaturas)
        {
            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 + "NUMNF, ";
                    vFILTER = vFILTER + "ZONA, ";
                    vFILTER = vFILTER + "LIVRO, ";
                    vFILTER = vFILTER + "CONTA, ";
                    vFILTER = vFILTER + "DATAENVIO, ";
                    vFILTER = vFILTER + "ROTA, ";
                    vFILTER = vFILTER + "EMAIL, ";
                    vFILTER = vFILTER + "ENVIOEMAIL ";

                    vINNERJOIN = " ";

                    vORDERBY = " ";


                    if (objEnvioEmailFaturas.NUMNF != 0)
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + "AND NUMNF = ?NUMNF "; }
                        else
                        { vAND = "AND NUMNF = ?NUMNF "; }

                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + " "; }
                        else
                        { vAND = " "; }
                    }


                    if (!string.IsNullOrEmpty(objEnvioEmailFaturas.ZONA))
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + "AND ZONA = ?ZONA "; }
                        else
                        { vAND = "AND ZONA = ?ZONA "; }

                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + " "; }
                        else
                        { vAND = " "; }
                    }

                    if (!string.IsNullOrEmpty(objEnvioEmailFaturas.LIVRO))
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + "AND LIVRO = ?LIVRO "; }
                        else
                        { vAND = "AND LIVRO = ?LIVRO "; }

                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + " "; }
                        else
                        { vAND = " "; }
                    }


                    if (!string.IsNullOrEmpty(objEnvioEmailFaturas.CONTA))
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + "AND CONTA = ?CONTA "; }
                        else
                        { vAND = "AND CONTA = ?CONTA "; }

                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + " "; }
                        else
                        { vAND = " "; }
                    }


                    cmd = new MySqlCommand(this.QuerySelect);


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

                    if (!string.IsNullOrEmpty(objEnvioEmailFaturas.ZONA))
                    {
                        cmd.Parameters.AddWithValue("?ZONA", objEnvioEmailFaturas.ZONA.ToString().ToUpper());
                    }

                    if (!string.IsNullOrEmpty(objEnvioEmailFaturas.LIVRO))
                    {
                        cmd.Parameters.AddWithValue("?LIVRO", objEnvioEmailFaturas.LIVRO.ToString().ToUpper());
                    }

                    if (!string.IsNullOrEmpty(objEnvioEmailFaturas.CONTA))
                    {
                        cmd.Parameters.AddWithValue("?CONTA", objEnvioEmailFaturas.CONTA.ToString().ToUpper());
                    }


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

                return sb.ToString();
            }
        }

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

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

                return sb.ToString();
            }
        }

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

                this.sb.AppendLine(vAND);
                this.sb.AppendLine(vORDERBY);

                return sb.ToString();
            }
        }

        #endregion

    }
}
