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 dalPlanoContas
    {
        string vFILTER = null;
        string vINNERJOIN = null;
        string vAND = null;
        string vORDERBY = null;

        #region Métodos

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


            try
            {
                objconexaoBD = new ConexaoBD();

                objconexaoBD.SetarConexaoBanco(TipoBDConexao.ctb_BD);

                using (objGerenciadorTransacao = FabricaGerenciadorTransacao.GetGerenciador(TipoBDGerenciador.MySql))
                {
                    vFILTER = vFILTER + "       ID , ";
                    vFILTER = vFILTER + "       ID_PC_ANTIGO , ";
                    vFILTER = vFILTER + "       CONTA , ";
                    vFILTER = vFILTER + "       CONTA_IMPRESSAO , ";
                    vFILTER = vFILTER + "       DESCRICAO , ";
                    vFILTER = vFILTER + "       GRAU , ";
                    vFILTER = vFILTER + "       TIPO , ";
                    vFILTER = vFILTER + "       REGULATORIA , ";
                    vFILTER = vFILTER + "       SOCIETARIA , ";
                    vFILTER = vFILTER + "       RETIFICADORA , ";
                    vFILTER = vFILTER + "       FISCAL , ";
                    vFILTER = vFILTER + "       FISCAL2 , ";
                    vFILTER = vFILTER + "       BMP , ";
                    vFILTER = vFILTER + "       BMP_FIXO , ";
                    vFILTER = vFILTER + "       CONTA_EMPRESA , ";
                    vFILTER = vFILTER + "       GRUPO_BP , ";
                    vFILTER = vFILTER + "       GRUPO_DRE , ";
                    vFILTER = vFILTER + "       GRUPO_DVA , ";
                    vFILTER = vFILTER + "       GRUPO_DMPL , ";
                    vFILTER = vFILTER + "       GRUPO_DFC , ";
                    vFILTER = vFILTER + "       CONTA_RECEITA_ECD , ";
                    vFILTER = vFILTER + "       CONTA_RECEITA_FCONT , ";
                    vFILTER = vFILTER + "       ATIVO , ";
                    vFILTER = vFILTER + "       ID_USUARIO , ";
                    vFILTER = vFILTER + "       DATA_HORA_USUARIO , ";
                    vFILTER = vFILTER + "       ID_EMPRESA ";

                    vINNERJOIN = " ";

                    vORDERBY = " ";


                    if (!string.IsNullOrEmpty(objPlanoContas.CONTA))
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + " AND REPLACE(CONTA,'.','') = ?CONTA "; }
                        else
                        { vAND = " AND REPLACE(CONTA,'.','') = ?CONTA "; }
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(vAND))
                        { vAND = vAND + " "; }
                        else
                        { vAND = " "; }
                    }

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

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


                    cmd = new MySqlCommand(this.QuerySelect);


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

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

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



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

                return sb.ToString();
            }
        }

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

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

                return sb.ToString();
            }
        }

        #endregion

    }
}
