using bdAntifraude.dbcontext;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;

namespace bdAntifraude.db
{
    public partial class PERSONAS
    {
        public static string ObtieneNifLink(string NIF)
        {
            return tsUtilidades.crypt.SHA1("M3Soft." + NIF);
        }

        /// <summary>
        /// Propiedad calculada para obtener el cargo ocupado actual.
        /// </summary>
        public string CAROCUACTUAL
        {
            get
            {
                // Usar la colección PUESTOSIDPERSONALNavigation para encontrar el puesto activo
              var puestoTrabajo = PUESTOSIDPERSONALNavigation?
                    .FirstOrDefault(p =>
                        p.IDRPTNavigation?.IDSITUACIONNavigation?.DESCRIPCION == "ACTIVA");

                return puestoTrabajo?.IDOCUPACIONNavigation?.DESCRIPCION ?? "Sin cargo ocupado";
            }
        }


        public string DEPARTAMENTOACTUAL
        {
            get
            {

                var aa = this;

                var puesto = PUESTOSIDPERSONALNavigation?.FirstOrDefault(x => x.IDRPTNavigation?.IDSITUACIONNavigation?.DESCRIPCION == "ACTIVA");
                
                return puesto?.IDRPTDESNavigation?.IDDEPARTAMENTONavigation?.VALORALFABETICOLARGO ?? "";
            }
        }

        public string SERVICIOADSCRITO
        {
            get
            {
                var puesto = PUESTOSIDPERSONALNavigation?.FirstOrDefault(x => x.IDRPTNavigation?.IDSITUACIONNavigation?.DESCRIPCION == "ACTIVA");

                return puesto?.IDSERVICIOADSCRITONavigation?.DESCRIPCION ?? "";
            }
        }
        public string PUESTOACTUAL
        {
            get
            {
                var puesto = PUESTOSIDPERSONALNavigation?.FirstOrDefault(x => x.IDRPTNavigation?.IDSITUACIONNavigation?.DESCRIPCION == "ACTIVA");

                return puesto?.IDRPTDESNavigation?.DENOMINACION ?? "";
            }
        }

        /// </summary>
        public string GRUPOFUNCIONARIODESCRIPCION
        {
            get
            {
                if (this.IDGRUPOFUNCIONARIO.HasValue)
                    return this.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION ?? "";
                else
                    return "";
            }
        }
        public string APELLIDOSNOMBRE
        {
            get
            {
                return this.APELLIDOS + ", " + this.NOMBRE;
            }
        }

        public string NombrePoblacion
        {
            get
            {
                var municipio = this.CODIGOMUNICIPIONavigation;
                if (municipio == null)
                {
                    return "";
                }
                else
                {
                    // Buscar el código postal en CODIGOSPOSTALES del municipio
                    var cp = municipio.CODIGOSPOSTALES
                        .FirstOrDefault(x => x.CODIGOPOSTAL == this.CODIGOPOSTAL);
                    if (cp != null)
                    {
                        if (!string.IsNullOrEmpty(cp.DESCRIPCIONADICIONAL))
                        {
                            return municipio.NOMBRE + " (" + cp.DESCRIPCIONADICIONAL + ")";
                        }
                        else
                        {
                            return municipio.NOMBRE;
                        }
                    }
                    else
                    {
                        return municipio.NOMBRE;
                    }
                }
            }
        }


        public string NombreProvincia
        {
            get
            {
                var municipio = this.CODIGOMUNICIPIONavigation;
                if (municipio == null)
                    return "";
                else
                    return municipio.CODIGOPROVINCIANavigation?.NOMBRE ?? "";
            }
        }

        public string NombrePoblacionNotificaciones
        {
            get
            {
                var municipio = this.CODIGOMUNICIPIONOTIFICACIONNavigation;
                if (municipio == null)
                {
                    return "";
                }
                else
                {
                    if (this.CODIGOPOSTALNOTIFICACIONES != null &&
                        municipio.CODIGOSPOSTALES.Any(x => x.CODIGOPOSTAL == this.CODIGOPOSTALNOTIFICACIONES))
                    {
                        var cp = municipio.CODIGOSPOSTALES
                            .First(x => x.CODIGOPOSTAL == this.CODIGOPOSTALNOTIFICACIONES);

                        if (cp.DESCRIPCIONADICIONAL != null)
                        {
                            return municipio.NOMBRE + " (" + cp.DESCRIPCIONADICIONAL + ")";
                        }
                        else
                        {
                            return municipio.NOMBRE;
                        }
                    }
                    else
                    {
                        return "";
                    }
                }
            }
        }
        public string NombreProvinciaNotificaciones
        {
            get
            {
                var municipio = this.CODIGOMUNICIPIONOTIFICACIONNavigation;

                if (municipio == null)
                {
                    return "";
                }
                else
                {
                    return municipio.CODIGOPROVINCIANavigation.NOMBRE;
                }
            }
        }
    }
}