using Exferia_Sincronizacion._0_Modelos.HPV;
using Exferia_Sincronizacion._0_Modelos.SNC;
using Exferia_Sincronizacion.Datos.GEN;
using Exferia_Sincronizacion.Datos.SNC;
using Exferia_Sincronizacion.General;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exferia_Sincronizacion.Datos.HPV
{
    public class HPVS_Gastos_Sincronizacion
    {
        #region Inicial
        public static void Sincronizar_Inicial(DbConnection _obj_DbConnection,
                                                DbTransaction _obj_DbTransaction,
                                               long _lng_idProducto,
                                               long _lng_idEmpresa,
                                               long _lng_idTerminal,
                                               string _str_GUID)
        {
            try
            {
                List<HPVS_Gastos_Modelo> lst_HPVS_Gastos_Modelo = Obtener_Registros(_obj_DbConnection, _obj_DbTransaction, _lng_idTerminal, _str_GUID);

                if (lst_HPVS_Gastos_Modelo != null &&
                    lst_HPVS_Gastos_Modelo.Count>0)
                {

                    foreach (HPVS_Gastos_Modelo mdl_HPVS_Gastos_Modelo in lst_HPVS_Gastos_Modelo)
                    {
                        //Formar campo clave
                        string str_CampoClave = mdl_HPVS_Gastos_Modelo.numeroGasto.ToString() + "|" +
                                                mdl_HPVS_Gastos_Modelo.idTerminal.ToString() + "|" +
                                                mdl_HPVS_Gastos_Modelo.fechaHora + "|" +
                                                mdl_HPVS_Gastos_Modelo.idCamarero.ToString() + "|" +
                                                mdl_HPVS_Gastos_Modelo.idEmpresa.ToString();

                        SNC_SincronizacionRegistros_Modelo mdl_SNC_SincronizacionRegistros_Modelo = null;
                        #region  Obtener el registro sincronizado si hubiera alguno
                        mdl_SNC_SincronizacionRegistros_Modelo = SNC_SincronizacionRegistros_Datos.Obtener_Registro(_obj_DbConnection,
                                                                                                                    _obj_DbTransaction,
                                                                                                                    _lng_idProducto,
                                                                                                                    _lng_idEmpresa,
                                                                                                                    _lng_idTerminal,
                                                                                                                    str_CampoClave,
                                                                                                                    HPVS_Gastos_Modelo.Tabla);
                        #endregion

                        #region Actualizar registro en BD
                        if (mdl_SNC_SincronizacionRegistros_Modelo != null)
                        {
                            SNC_SincronizacionRegistros_Datos.Actualizar(_obj_DbConnection, _obj_DbTransaction, mdl_SNC_SincronizacionRegistros_Modelo.id, Variables_Sincronizacion.G_STR_TIPOACCION_CONFIRMADO);
                        }
                        //Si no existe lo inserto
                        else
                        {
                            //Insertar BD
                            SNC_SincronizacionRegistros_Datos.Insertar(_obj_DbConnection,
                                                                        _obj_DbTransaction,
                                                                        _lng_idProducto,
                                                                        _lng_idEmpresa,
                                                                        str_CampoClave,
                                                                        HPVS_Gastos_Modelo.Tabla,
                                                                        _lng_idTerminal,
                                                                        Variables_Sincronizacion.G_STR_TIPOACCION_CONFIRMADO,
                                                                        Variables_Sincronizacion.g_int_Orden_HPVS_Gastos);
                        }
                        #endregion




                    }
                    
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(HPVS_Gastos_Sincronizacion) + "/" + nameof(Sincronizar_Inicial), true);
            }
        }
        #endregion

        public static List<HPVS_Gastos_Modelo> Obtener_Registros(DbConnection _obj_DbConnection,
                                                                DbTransaction _obj_DbTransaction,
                                                                long _lng_idTerminal,
                                                                string _str_GUID)
        {
            List<HPVS_Gastos_Modelo> lst_HPVS_Gastos_Modelo = new List<HPVS_Gastos_Modelo>();
            DbDataReader obj_DbDataReader = null;
            try
            {
                string str_SQL = " SELECT " +
                                           nameof(HPVS_Gastos_Modelo.numeroGasto) + "," +
                                           nameof(HPVS_Gastos_Modelo.idTerminal) + "," +
                                           nameof(HPVS_Gastos_Modelo.fechaHora) + "," +
                                           nameof(HPVS_Gastos_Modelo.idCamarero) + "," +
                                           nameof(HPVS_Gastos_Modelo.idEmpresa) + 
                                       " FROM " + HPVS_Gastos_Modelo.Tabla +
                                       " WHERE " +
                                           nameof(HPVS_Gastos_Modelo.idTerminal) + "=" + _lng_idTerminal + " AND " +
                                           nameof(HPVS_Gastos_Modelo.guid) + " = '" + _str_GUID + "'";
                //....................................................................

                DbCommand obj_DbCommand = _obj_DbConnection.CreateCommand();
                if (_obj_DbTransaction != null)
                {
                    obj_DbCommand.Transaction = _obj_DbTransaction;
                }
                obj_DbCommand.CommandText = str_SQL;

                obj_DbDataReader = obj_DbCommand.ExecuteReader();
                while (obj_DbDataReader.Read())
                {
                    HPVS_Gastos_Modelo mdl_HPVS_Gastos_Modelo = new HPVS_Gastos_Modelo();

                    //numeroGasto
                    mdl_HPVS_Gastos_Modelo.numeroGasto = obj_DbDataReader.GetInt64(0);

                    //idTerminal
                    mdl_HPVS_Gastos_Modelo.idTerminal = obj_DbDataReader.GetInt64(1);

                    //fechaHora
                    mdl_HPVS_Gastos_Modelo.fechaHora = obj_DbDataReader.GetDateTime(2).ToString("yyyyMMddHHmmss");

                    //idCamarero
                    mdl_HPVS_Gastos_Modelo.idCamarero = obj_DbDataReader.GetInt64(3);

                    //idEmpresa
                    mdl_HPVS_Gastos_Modelo.idEmpresa = obj_DbDataReader.GetInt64(4);

                    
                    lst_HPVS_Gastos_Modelo.Add(mdl_HPVS_Gastos_Modelo);

                }
                obj_DbDataReader.Close();
            }
            catch (Exception ex)
            {
                if (obj_DbDataReader != null &&
                   !obj_DbDataReader.IsClosed)
                {
                    obj_DbDataReader.Close();
                }

                throw new Control_Errores("", ex, nameof(HPVS_Gastos_Sincronizacion) + "/" + nameof(Obtener_Registros), true);
            }

            return lst_HPVS_Gastos_Modelo;
        }

    }
}
