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

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

        #region Métodos

        public void Insert(entidadeConfiguracoes objConfiguracoes)
        {
            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 + "NOME = ?NOME , ";
                    vFILTER = vFILTER + "TIPO = ?TIPO , ";
                    vFILTER = vFILTER + "VALOR = ?VALOR  , ";
                    vFILTER = vFILTER + "VALOR_PADRAO = ?VALOR_PADRAO , ";
                    vFILTER = vFILTER + "DESCRICAO = ?DESCRICAO , ";
                    vFILTER = vFILTER + "ACESSO = ?ACESSO ";

                    cmd = new MySqlCommand(this.QueryInsert);

                    cmd.Parameters.AddWithValue("?NOME", objConfiguracoes.NOME.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?TIPO", objConfiguracoes.TIPO.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?VALOR", objConfiguracoes.VALOR.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?VALOR_PADRAO", objConfiguracoes.VALOR_PADRAO.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?DESCRICAO", objConfiguracoes.DESCRICAO.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?ACESSO", objConfiguracoes.ACESSO);


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

        public void Update(entidadeConfiguracoes objConfiguracoes)
        {
            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 + "TIPO = ?TIPO , ";
                    vFILTER = vFILTER + "VALOR = ?VALOR , ";
                    vFILTER = vFILTER + "DESCRICAO = ?DESCRICAO ";

                    vAND = vAND + "AND NOME = ?NOME ";

                    cmd = new MySqlCommand(this.QueryUpdate);

                    cmd.Parameters.AddWithValue("?TIPO", objConfiguracoes.TIPO);
                    cmd.Parameters.AddWithValue("?VALOR", objConfiguracoes.VALOR);
                    cmd.Parameters.AddWithValue("?DESCRICAO", objConfiguracoes.DESCRICAO.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?NOME", objConfiguracoes.NOME.ToString().ToUpper());


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

        public void Update_1(entidadeConfiguracoes objConfiguracoes)
        {
            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 + "TIPO = ?TIPO , ";
                    vFILTER = vFILTER + "VALOR = ?VALOR , ";
                    vFILTER = vFILTER + "VALOR_PADRAO = ?VALOR , ";
                    vFILTER = vFILTER + "DESCRICAO = ?DESCRICAO , ";
                    vFILTER = vFILTER + "ACESSO = ?ACESSO ";

                    vAND = vAND + "AND NOME = ?NOME ";

                    cmd = new MySqlCommand(this.QueryUpdate);

                    cmd.Parameters.AddWithValue("?TIPO", objConfiguracoes.TIPO.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?VALOR", objConfiguracoes.VALOR.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?DESCRICAO", objConfiguracoes.DESCRICAO.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?ACESSO", objConfiguracoes.ACESSO.ToString().ToUpper());
                    cmd.Parameters.AddWithValue("?NOME", objConfiguracoes.NOME.ToString());


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

        public DataTable Select(entidadeConfiguracoes objConfiguracoes)
        {
            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 + "TIPO, ";
                    vFILTER = vFILTER + "VALOR ";

                    vINNERJOIN = " ";

                    vORDERBY = " ";

                    vAND = vAND + "AND UPPER(NOME) = ?NOME  ";

                    cmd = new MySqlCommand(this.QuerySelect);

                    cmd.Parameters.AddWithValue("?NOME", objConfiguracoes.NOME.ToString().ToUpper());

                    dt = objGerenciadorTransacao.GetDataTable(cmd);
                }

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

        public DataTable Select_1(entidadeConfiguracoes objConfiguracoes)
        {
            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 + "NOME, ";
                    vFILTER = vFILTER + "TIPO, ";
                    vFILTER = vFILTER + "VALOR, ";
                    vFILTER = vFILTER + "DESCRICAO, ";
                    vFILTER = vFILTER + "ACESSO ";

                    vINNERJOIN = " ";

                    vORDERBY = " ";

                    if (objConfiguracoes.NOME != String.Empty)
                    {
                        vAND = vAND + "AND NOME LIKE ('%' ?NOME '%') ";
                    }
                    else
                    {
                        vAND = " ";
                    }

                    cmd = new MySqlCommand(this.QuerySelect);

                    if (objConfiguracoes.NOME != String.Empty)
                    {
                        cmd.Parameters.AddWithValue("?NOME", objConfiguracoes.NOME.ToString());
                    }

                    dt = objGerenciadorTransacao.GetDataTable(cmd);
                }

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

        public DataTable Select_2(entidadeConfiguracoes objConfiguracoes)
        {
            DataTable dt = null;
            MySqlCommand cmd = null;
            IGerenciadorTransacao objGerenciadorTransacao = null;
            ConexaoBD objconexaoBD = null;

            try
            {
                objconexaoBD = new ConexaoBD();

                objconexaoBD.SetarConexaoBanco(TipoBDConexao.fatwin_BD);

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

                    vFILTER = vFILTER + "nomepar AS NOME, ";
                    vFILTER = vFILTER + "'Número Inteiro' AS TIPO, ";
                    vFILTER = vFILTER + "valorpar AS VALOR, ";
                    vFILTER = vFILTER + "`desc` AS DESCRICAO, ";
                    vFILTER = vFILTER + "'0' AS ACESSO ";

                    vINNERJOIN = " ";

                    vORDERBY = " ";

                    if (objConfiguracoes.NOME != String.Empty)
                    {
                        vAND = vAND + "AND nomepar LIKE ('%' ?NOME '%') ";
                    }
                    else
                    {
                        vAND = " ";
                    }

                    cmd = new MySqlCommand(this.QuerySelectFatwin);

                    if (objConfiguracoes.NOME != String.Empty)
                    {
                        cmd.Parameters.AddWithValue("?NOME", objConfiguracoes.NOME.ToString());
                    }

                    dt = objGerenciadorTransacao.GetDataTable(cmd);
                }

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

        public DataTable SelectCount(entidadeConfiguracoes objConfiguracoes)
        {
            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 + "COUNT(*) AS QTDE ";

                    vINNERJOIN = " ";

                    vORDERBY = " ";

                    vAND = vAND + "AND UPPER(NOME) = ?NOME  ";

                    cmd = new MySqlCommand(this.QuerySelect);

                    cmd.Parameters.AddWithValue("?NOME", objConfiguracoes.NOME.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("CONFIGURACOES SET  ");
                this.sb.AppendLine(vFILTER);

                return sb.ToString();
            }
        }

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

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

                return sb.ToString();
            }
        }

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

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

                return sb.ToString();
            }
        }

        #endregion
    }
}
