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

        #region Métodos


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

            try
            {
                objconexaoBD = new ConexaoBD();

                objconexaoBD.SetarConexaoBanco(TipoBDConexao.nss_BD);

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

                    vFILTER = vFILTER + " NOMEMAQUINA ";
                    vFILTER = vFILTER + ", CDCLAS ";
                    vFILTER = vFILTER + ", DSCLAS ";
                    vFILTER = vFILTER + ", VLR_CONSUMO_REATIVO_PONTA ";
                    vFILTER = vFILTER + ", VLR_CONSUMO_REATIVO_FPONTA ";
                    vFILTER = vFILTER + ", VLR_DEMANDA_REATIVO_FPONTA ";
                    vFILTER = vFILTER + ", QTD_DEMANDA_ULTRAP_PONTA ";
                    vFILTER = vFILTER + ", QTD_DEMANDA_ULTRAP_FPONTA ";
                    vFILTER = vFILTER + ", VLR_DEMANDA_ULTRAP_PONTA ";
                    vFILTER = vFILTER + ", VLR_DEMANDA_ULTRAP_FPONTA ";
                    vFILTER = vFILTER + ", IDUSUARIO ";
                    vFILTER = vFILTER + ", DATAINCLUSAO ";

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

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

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

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

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

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

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

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

                    vINNERJOIN = " ";


                    vORDERBY = " ";

                    cmd = new MySqlCommand(this.QuerySelect);

                    if (!string.IsNullOrEmpty(objReativo.NOMEMAQUINA))
                    {
                        cmd.Parameters.AddWithValue("?NOMEMAQUINA", objReativo.NOMEMAQUINA);
                    }

                    if (!string.IsNullOrEmpty(objReativo.CDCLAS))
                    {
                        cmd.Parameters.AddWithValue("?CDCLAS", objReativo.CDCLAS);
                    }

                    if (!string.IsNullOrEmpty(objReativo.DSCLAS))
                    {
                        cmd.Parameters.AddWithValue("?DSCLAS", objReativo.DSCLAS);
                    }

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

                    dt = objGerenciadorTransacao.GetDataTable(cmd);
                }

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

        public void Insert(entidadeReativo objReativo)
        {
            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 + " NOMEMAQUINA = ?NOMEMAQUINA ";
                    vFILTER = vFILTER + ", CDCLAS = ?CDCLAS  ";
                    vFILTER = vFILTER + ", DSCLAS = ?DSCLAS ";
                    vFILTER = vFILTER + ", VLR_CONSUMO_REATIVO_PONTA = ?VLR_CONSUMO_REATIVO_PONTA ";
                    vFILTER = vFILTER + ", VLR_CONSUMO_REATIVO_FPONTA = ?VLR_CONSUMO_REATIVO_FPONTA  ";
                    vFILTER = vFILTER + ", VLR_DEMANDA_REATIVO_PONTA = ?VLR_DEMANDA_REATIVO_PONTA  ";
                    vFILTER = vFILTER + ", VLR_DEMANDA_REATIVO_FPONTA = ?VLR_DEMANDA_REATIVO_FPONTA  ";
                    vFILTER = vFILTER + ", QTD_DEMANDA_ULTRAP_PONTA = ?QTD_DEMANDA_ULTRAP_PONTA  ";
                    vFILTER = vFILTER + ", QTD_DEMANDA_ULTRAP_FPONTA = ?QTD_DEMANDA_ULTRAP_FPONTA  ";
                    vFILTER = vFILTER + ", VLR_DEMANDA_ULTRAP_PONTA = ?VLR_DEMANDA_ULTRAP_PONTA  ";
                    vFILTER = vFILTER + ", VLR_DEMANDA_ULTRAP_FPONTA = ?VLR_DEMANDA_ULTRAP_FPONTA  ";
                    vFILTER = vFILTER + ", IDUSUARIO = ?IDUSUARIO ";
                    vFILTER = vFILTER + ", DATAINCLUSAO = Now() ";

                    cmd = new MySqlCommand(this.QueryInsert);

                    cmd.Parameters.AddWithValue("?NOMEMAQUINA", objReativo.NOMEMAQUINA);
                    cmd.Parameters.AddWithValue("?CDCLAS", objReativo.CDCLAS);
                    cmd.Parameters.AddWithValue("?DSCLAS", objReativo.DSCLAS);
                    cmd.Parameters.AddWithValue("?VLR_CONSUMO_REATIVO_PONTA", objReativo.VLR_CONSUMO_REATIVO_PONTA);
                    cmd.Parameters.AddWithValue("?VLR_CONSUMO_REATIVO_FPONTA", objReativo.VLR_CONSUMO_REATIVO_FPONTA);
                    cmd.Parameters.AddWithValue("?VLR_DEMANDA_REATIVO_PONTA", objReativo.VLR_DEMANDA_REATIVO_PONTA);
                    cmd.Parameters.AddWithValue("?VLR_DEMANDA_REATIVO_FPONTA", objReativo.VLR_DEMANDA_REATIVO_FPONTA);
                    cmd.Parameters.AddWithValue("?QTD_DEMANDA_ULTRAP_PONTA", objReativo.QTD_DEMANDA_ULTRAP_PONTA);
                    cmd.Parameters.AddWithValue("?QTD_DEMANDA_ULTRAP_FPONTA", objReativo.QTD_DEMANDA_ULTRAP_FPONTA);
                    cmd.Parameters.AddWithValue("?VLR_DEMANDA_ULTRAP_PONTA", objReativo.VLR_DEMANDA_ULTRAP_PONTA);
                    cmd.Parameters.AddWithValue("?VLR_DEMANDA_ULTRAP_FPONTA", objReativo.VLR_DEMANDA_ULTRAP_FPONTA);
                    cmd.Parameters.AddWithValue("?IDUSUARIO", objReativo.IDUSUARIO);

                    objGerenciadorTransacao.Execute(cmd);
                }
            }
            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("REATIVO SET  ");
                this.sb.AppendLine(vFILTER);

                return sb.ToString();
            }
        }

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

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

                return sb.ToString();
            }
        }


        #endregion

    }

}

