using bdAntifraude.db;
using bdAntifraude;
using Microsoft.EntityFrameworkCore;
using Renci.SshNet;
using System.Diagnostics;
using System.Security.Cryptography;
using tsUtilidades.Enumeraciones;
using tsUtilidades;

namespace SwaggerAntifraude.Servicios
{
    public class ServiciosGestion
    {

        private static void GuardandoCambiosNomina(object sender, EventArgs e)
        {
            //OAEntities bd = (OAEntities)sender;

            //// 
            //// ELIMINACION DE NOMINAS
            //// 
            //var NominasEliminadas = bd.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Where(x => x.EntitySet.Name == "NOMINATRABAJADORCABECERA").ToList();
            //if (NominasEliminadas.Count > 0)
            //{
            //    SftpClient sftp;
            //    sftp = ConectaServidorSftp(bd);
            //    sftp.Connect();
            //    foreach (var n in NominasEliminadas)
            //    {
            //        int idTr = n.OriginalValues("IDPERSONA");
            //        int Año = n.OriginalValues("AÑONOMINA");
            //        int Mes = n.OriginalValues("MESNOMINA");
            //        bool EsDieta = n.OriginalValues("ESLIQUIDACIONDIPUTADO").ToString();
            //        string Fichero;
            //        if (EsDieta)
            //        {
            //            Fichero = "nominas/dietas/" + Año.ToString() + "/" + Mes.ToString().PadLeft(2, '0') + "/" + Año.ToString() + Mes.ToString().PadLeft(2, '0') + "-" + idTr.ToString() + ".pdf";
            //        }
            //        else
            //        {
            //            Fichero = "ordinarias/" + Año.ToString() + "/" + Mes.ToString().PadLeft(2, '0') + "/" + Año.ToString() + Mes.ToString().PadLeft(2, '0') + "-" + idTr.ToString() + ".pdf";
            //        }
            //        if (sftp.Exists(Fichero))
            //            sftp.DeleteFile(Fichero);
            //    }
            //    sftp.Disconnect();
            //}
            //if (bd.NivelLog != NivelLogs.SIN_LOGS)
            //{
            //    IEnumerable<ObjectStateEntry> om;
            //    om = bd.ObjectStateManager.GetObjectStateEntries(EntityState.Added);
            //    foreach (var o in om)
            //    {
            //        if (o.Entity.GetType().GetProperties.Any(X => X.Name == "IDUSUARIOALTA"))
            //        {
            //            var c = o.Entity.GetType().GetProperty("IDUSUARIOALTA");
            //            c.SetValue(o.Entity, dsc.idUsuario);
            //        }

            //        if (o.Entity.GetType().GetProperties.Any(X => Operators.ConditionalCompareObjectEqual(X.Name, "FECHAREGISTRONUEVO", false)))
            //        {
            //            var c = o.Entity.GetType().GetProperty("FECHAREGISTRONUEVO");
            //            c.SetValue(o.Entity, Utilidades.AhoraOracle(bd));
            //        }
            //    }
            //    om = bd.ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
            //    foreach (var o in om)
            //    {
            //        if (o.Entity.GetType().GetProperties.Any(X => Operators.ConditionalCompareObjectEqual(X.Name, "IDUSUARIOMODIFICA", false)))
            //        {
            //            var c = o.Entity.GetType().GetProperty("IDUSUARIOMODIFICA");
            //            c.SetValue(o.Entity, dsc.idUsuario);
            //        }

            //        if (o.Entity.GetType().GetProperties.Any(X => Operators.ConditionalCompareObjectEqual(X.Name, "FECHAREGISTROMODIFICADO", false)))
            //        {
            //            var c = o.Entity.GetType().GetProperty("FECHAREGISTROMODIFICADO");
            //            c.SetValue(o.Entity, Utilidades.AhoraOracle(bd));
            //        }
            //    }

            //    if (bd.NivelLog == NivelLogs.MODIFICACIONES_Y_ELIMINACIONES)
            //    {
            //        om = bd.ObjectStateManager.GetObjectStateEntries(EntityState.Modified + EntityState.Deleted);
            //    }
            //    else
            //    {
            //        om = bd.ObjectStateManager.GetObjectStateEntries(EntityState.Modified + EntityState.Added + EntityState.Deleted);
            //    }
            //    // End If

            //    foreach (var o in om)
            //    {
            //        try
            //        {
            //            string CampoTimeStamp = o.Entity.GetType().GetProperties.Any(X => Operators.ConditionalCompareObjectEqual(X.Name, "IDTIMESPAN", false)) ? "IDTIMESPAN" : "";
            //            var nl = new LOGS();
            //            if (!EntidadesExcluidas.Contains(o.EntitySet.Name.ToLower))
            //            {
            //                nl.TABLA = o.EntitySet.Name;
            //                try
            //                {
            //                    nl.ID = (long)o.EntityKey.EntityKeyValues.First.Value;
            //                }
            //                catch
            //                {
            //                }
            //                var lpm = new List<string>();
            //                switch (o.State)
            //                {
            //                    case var @case when @case == EntityState.Added:
            //                        {
            //                            nl.IDTIPO = TipoLog.ALTA;
            //                            lpm = o.CurrentValues.DataRecordInfo.FieldMetadata.Select(x => x.FieldType.ToString).ToList;
            //                            if (o.Entity.GetType().GetProperties.Any(X => Operators.ConditionalCompareObjectEqual(X.Name, "IDTIMESPAN", false)))
            //                            {
            //                                var cts = o.Entity.GetType().GetProperty("IDTIMESPAN");
            //                                double ticks = DateTime.Now.Ticks;
            //                                cts.SetValue(o.Entity, ticks);
            //                                nl.IDTIMESTAMP = ticks;
            //                            }

            //                            break;
            //                        }
            //                    case var case1 when case1 == EntityState.Deleted:
            //                        {
            //                            nl.IDTIPO = TipoLog.ELIMINACION;
            //                            break;
            //                        }
            //                    case var case2 when case2 == EntityState.Modified:
            //                        {
            //                            nl.IDTIPO = TipoLog.MODIFICACION;
            //                            lpm = o.GetModifiedProperties.ToList;
            //                            break;
            //                        }
            //                }
            //                nl.USUARIO = Usuario;
            //                nl.FECHAHORA = AhoraOracle(bd);
            //                nl.IP = bd.ip;
            //                nl.APLICACION = bd.Aplicacion;
            //                nl.IDCONEXION = bd.idConexion;
            //                var rl = new RegistroLog();
            //                if (o.State == EntityState.Deleted)
            //                {
            //                    try
            //                    {
            //                        for (int i = 0, loopTo = o.OriginalValues.FieldCount - 1; i <= loopTo; i++)
            //                        {
            //                            var ol = new CampoLog();
            //                            ol.NombreCampo = o.OriginalValues.GetName(i);
            //                            ol.ValorAnterior = nl.ID.ToString;
            //                            rl.CamposLog.Add(ol);
            //                        }
            //                    }
            //                    catch (Exception ex)
            //                    {
            //                        Debug.Write(ex.Message);
            //                    }
            //                }
            //                else
            //                {
            //                    foreach (var p in lpm)
            //                    {
            //                        var tipo = o.Entity.GetType().GetProperty(p).PropertyType;
            //                        // Dim stipo = tipo.ToString
            //                        // Dim sTipoBase = tipo.BaseType.ToString
            //                        try
            //                        {
            //                            var ol = new CampoLog();
            //                            ol.NombreCampo = p;
            //                            // If Not (tipo Is GetType(Byte()) Or p.ToLower = "entitykey" Or stipo.ToLower.Contains("entitycollection") Or stipo.ToLower.Contains("entityreference") Or sTipoBase.ToLower.Contains("entityobject")) Then
            //                            if (!object.ReferenceEquals(tipo, typeof(byte[])))
            //                            {
            //                                switch (o.State)
            //                                {
            //                                    case var case3 when case3 == EntityState.Added:
            //                                        {
            //                                            if (o.CurrentValues(p) is not null)
            //                                                ol.ValorNuevo = o.CurrentValues(p).ToString;
            //                                            break;
            //                                        }

            //                                    default:
            //                                        {
            //                                            if (o.OriginalValues(p) is not null)
            //                                                ol.ValorAnterior = o.OriginalValues(p).ToString;
            //                                            if (o.CurrentValues(p) is not null)
            //                                                ol.ValorNuevo = o.CurrentValues(p).ToString;
            //                                            break;
            //                                        }
            //                                }
            //                            }
            //                            rl.CamposLog.Add(ol);
            //                        }
            //                        catch (Exception ex)
            //                        {
            //                            Debug.Write(ex.Message);
            //                        }
            //                    }
            //                }
            //                nl.LOG = tsl5.Utilidades.Serializar(rl);
            //                bd.AddToLOGS(nl);
            //            }
            //        }
            //        catch (Exception ex)
            //        {
            //            Debug.Write(ex.Message);
            //        }
            //    }
            //}
        }


        //public static bool CompruebaFicheroNomina(NOMINATRABAJADORCABECERA N)
        //{
            //var bd = bdAntifraude.Utilidades.NuevaConexion(bdAntifraude.Utilidades.ObtieneCBD());
            //SftpClient sftp = ConectarServidorSftp(bd);
            //sftp.Connect();
            //string Fichero = "";
            //if (N.ESLIQUIDACIONDIPUTADO == true)
            //{
            //    Fichero = "nominas/dietas/" + N.IDNOMINANavigation?.AÑO.ToString() + "/" + N.IDNOMINANavigation?.DESCRIPCION + "/" + N.IDNOMINANavigation?.AÑO.ToString() + N.IDNOMINANavigation?.MES.ToString().PadLeft(2, '0') + "-" + N.IDPERSONA.ToString() + ".pdf";
            //}
            //else
            //{
            //    Fichero = "ordinarias/" + N.IDNOMINANavigation?.AÑO.ToString() + "/" + N.IDNOMINANavigation?.DESCRIPCION + "/" + N.IDNOMINANavigation?.AÑO.ToString() + N.IDNOMINANavigation?.MES.ToString().PadLeft(2, '0') + "-" + N.IDPERSONA.ToString() + ".pdf";
            //}
            //bool result = sftp.Exists(Fichero);
            //sftp.Disconnect();
            //return result;
        //}


    }
}
