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 HPV_Ingredientes_Sincronizacion
    {
        #region Inicial

        public static void Sincronizar_Inicial(DbConnection _obj_DbConnection,
                                                DbTransaction _obj_DbTransaction,
                                              long _lng_idProducto,
                                              long _lng_idEmpresa,
                                              long _lng_idTerminal,
                                              long _lng_idIngrediente,
                                              SNC_SincronizacionRegistros_Modelo _mdl_SNC_SincronizacionRegistros_Modelo)
        {
            try
            {
                //Formar campo clave
                string str_CampoClave = _lng_idIngrediente.ToString();

                #region Actualizar registro en BD
                if (_mdl_SNC_SincronizacionRegistros_Modelo != null)
                {
                    if (!_mdl_SNC_SincronizacionRegistros_Modelo.tipoAccion.Equals(Variables_Sincronizacion.G_STR_TIPOACCION_ACTUALIZAR))
                    {
                        SNC_SincronizacionRegistros_Datos.Actualizar(_obj_DbConnection, _obj_DbTransaction, _mdl_SNC_SincronizacionRegistros_Modelo.id, Variables_Sincronizacion.G_STR_TIPOACCION_ACTUALIZAR);
                    }
                }
                else
                {
                    //Insertar BD
                    SNC_SincronizacionRegistros_Datos.Insertar(_obj_DbConnection,
                                                                _obj_DbTransaction,
                                                              _lng_idProducto,
                                                              _lng_idEmpresa,
                                                              str_CampoClave,
                                                              HPV_Ingredientes_Modelo.Tabla,
                                                              _lng_idTerminal,
                                                              Variables_Sincronizacion.G_STR_TIPOACCION_ACTUALIZAR,
                                                              Variables_Sincronizacion.g_int_Orden_HPV_Ingredientes);
                }
                #endregion

                #region HPV_Ingredientes_Caracteristicas
                HPV_Ingredientes_Caracteristicas_Sincronizacion.Sincronizar_Inicial(_obj_DbConnection,
                                                                                         _obj_DbTransaction,
                                                                                        _lng_idProducto,
                                                                                        _lng_idEmpresa,
                                                                                        _lng_idTerminal,
                                                                                        _lng_idIngrediente);
                #endregion

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

        #region Actualizar
        public static void Sincronizar_Actualizar(DbConnection _obj_DbConnection,
                                                    DbTransaction _obj_DbTransaction,
                                                    long _lng_idProducto,
                                                    long _lng_idEmpresa,
                                                    long _lng_idIngrediente)
        {
            try
            {
                List<long> lst_idTerminal = SNC_SincronizacionRegistros_Datos.Obtener_Terminales_PorProducto(_obj_DbConnection, _obj_DbTransaction, _lng_idProducto, _lng_idEmpresa);

                if (lst_idTerminal != null &&
                    lst_idTerminal.Count > 0)
                {
                    foreach (long lng_idTerminal in lst_idTerminal)
                    {
                        Sincronizar_Actualizar(_obj_DbConnection,
                                                _obj_DbTransaction,
                                                _lng_idProducto,
                                                _lng_idEmpresa,
                                                lng_idTerminal,
                                                _lng_idIngrediente);
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(HPV_Ingredientes_Sincronizacion) + "/" + nameof(Sincronizar_Actualizar), true);
            }
        }


        public static void Sincronizar_Actualizar(DbConnection _obj_DbConnection,
                                                DbTransaction _obj_DbTransaction,
                                                long _lng_idProducto,
                                                long _lng_idEmpresa,
                                                long _lng_idTerminal,
                                                long _lng_idIngrediente)
        {
            try
            {
                //Formar campo clave
                string str_CampoClave = _lng_idIngrediente.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,
                                                                                                    HPV_Ingredientes_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_ACTUALIZAR);


                    #region HPV_Ingredientes_Caracteristicas
                    HPV_Ingredientes_Caracteristicas_Sincronizacion.Sincronizar_Actualizar(_obj_DbConnection,
                                                                                            _obj_DbTransaction,
                                                                                            _lng_idProducto,
                                                                                            _lng_idEmpresa,
                                                                                            _lng_idTerminal,
                                                                                            _lng_idIngrediente);

                    #endregion

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

        public static void Sincronizar_Actualizar_DesdeRelacion(DbConnection _obj_DbConnection,
                                                                 DbTransaction _obj_DbTransaction,
                                                                long _lng_idProducto,
                                                                long _lng_idEmpresa,
                                                                long _lng_idTerminal,
                                                                long _lng_idIngrediente)
        {
            try
            {
                //Formar campo clave
                string str_CampoClave = _lng_idIngrediente.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,
                                                                                                    HPV_Ingredientes_Modelo.Tabla);
                #endregion

                #region Actualizar registro en BD
                if (mdl_SNC_SincronizacionRegistros_Modelo == null)
                {
                    //Insertar BD
                    SNC_SincronizacionRegistros_Datos.Insertar(_obj_DbConnection,
                                                                _obj_DbTransaction,
                                                                _lng_idProducto,
                                                                _lng_idEmpresa,
                                                                str_CampoClave,
                                                                HPV_Ingredientes_Modelo.Tabla,
                                                                _lng_idTerminal,
                                                                Variables_Sincronizacion.G_STR_TIPOACCION_ACTUALIZAR,
                                                                Variables_Sincronizacion.g_int_Orden_HPV_Ingredientes);

                    #region HPV_Ingredientes_Caracteristicas
                    HPV_Ingredientes_Caracteristicas_Sincronizacion.Sincronizar_Actualizar(_obj_DbConnection,
                                                                                            _obj_DbTransaction,
                                                                                            _lng_idProducto,
                                                                                            _lng_idEmpresa,
                                                                                            _lng_idTerminal,
                                                                                            _lng_idIngrediente);

                    #endregion


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