@page "/CumplimientoTrienios"
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using RegistroPersonalAN.Models
@using BlazorBootstrap
@using bdAntifraude.db
@rendermode InteractiveServer
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState

<div class="pagina">
    <div class="Cabecera">
        <h6><small><i class="fas fa-hourglass-end"></i><b> Cumplimiento de Trienios</b></small></h6>
    </div>

    @if (!datosCargados)
    {
            <div id="cargando" class="loadingFrame">
                <div class="loadingImg"></div>
            </div>
    }
    else if (listPersonas == null || !listPersonas.Any())
    {
            <p>No se encontraron datos para mostrar.</p>
    }
    else
    {
<div class="tablaDesk">
            <Grid TItem="PERSONAS"
                  Class="table tablaRegPers"
                  Data="listPersonas"
                  AllowFiltering="false"
                  PageSize="10"
                  AllowPaging="true"
                  AllowSorting="true"
                  Height="100"
              EmptyText="No se han encontrado datos"
                  PageSizeSelectorVisible="false"
                  PageSizeSelectorItems="@(new int[] { 5,10,20,50 })"
                  Responsive="true"
                  PaginationItemsTextFormat="{0} - {1} de {2} elementos">
                <GridColumns>
                    <GridColumn TItem="PERSONAS" HeaderText="NIF" PropertyName="NIF">
                        <a href="@HashRed(context.NIF!)">@context.NIF</a>
                    </GridColumn>
                    <GridColumn TItem="PERSONAS" HeaderText="Apellidos" PropertyName="APELLIDOS">
                    @context.APELLIDOS
                    </GridColumn>
                    <GridColumn TItem="PERSONAS" HeaderText="Nombre" PropertyName="NOMBRE">
                    @context.NOMBRE
                    </GridColumn>
                    <GridColumn TItem="PERSONAS" HeaderText="Fecha Prox. Trienio" PropertyName="FECHACUMPLIMIENTOPROXTRIENIO">
                    @context.FECHACUMPLIMIENTOPROXTRIENIO?.ToString("dd/MM/yyyy")
                    </GridColumn>
                    <GridColumn TItem="PERSONAS" HeaderText="Situación" PropertyName="LITERAL_SITUACION">
                    @context.IDSITUACIONADMINISTRATIVARPTNavigation?.LITERAL_SITUACION
                    </GridColumn>
                </GridColumns>
            </Grid>
            </div>
        <div class="tablaMov">
            @foreach (var itm in listPersonas)
            {
                var collapseId = $"collapse{itm.IDPERSONA}";
                <div class="card collapse-card Aceptada">
                    <div class="card-header mb-1" data-bs-toggle="collapse" data-bs-target="#@collapseId" aria-expanded="false" aria-controls="@collapseId">
                        <h5 class="mb-0">@itm.NIF - @itm.APELLIDOS, @itm.NOMBRE</h5>
                    </div>
                    <div id="@collapseId" class="collapse">
                        <div class="card-body">
                            <dl class="row">
                                <dt class="col-sm-3">NIF</dt>
                                <dd class="col-sm-9"><a href="@HashRed(itm.NIF)">@itm.NIF</a></dd>
                                <dt class="col-sm-3">Apellidos</dt>
                                <dd class="col-sm-9">@itm.APELLIDOS</dd>
                                <dt class="col-sm-3">Nombre</dt>
                                <dd class="col-sm-9">@itm.NOMBRE</dd>
                                <dt class="col-sm-3">Fecha Prox. Trienio</dt>
                                <dd class="col-sm-9">@itm.FECHACUMPLIMIENTOPROXTRIENIO?.ToString("dd/MM/yyyy")</dd>
                                <dt class="col-sm-3">Situacion</dt>
                                <dd class="col-sm-9">@itm..IDSITUACIONADMINISTRATIVARPTNavigation?.LITERAL_SITUACION</dd>                               
                            </dl>
                        </div>
                    </div>
                </div>
            }
        </div>
    }
</div>

@code {
    private List<PERSONAS> listPersonas = new List<PERSONAS>();
    private bool datosCargados = false;
    private string _filter = "";
    public string Filter
    {
        get => _filter;
        set
        {
            if (_filter != value)
            {
                _filter = value;
               
            }
        }
    }

    private string HashRed(string id)
    {
        // Genera el enlace encriptado para la navegación a InfoPersonas
        return "/InfoPersonas?cl=" + tsUtilidades.crypt.FEncS(
            id,
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
            875421649);
    }

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            // Cargamos los datos solo cuando el cliente está conectado para evitar duplicados por prerendering
            await LoadDataAsync();
            StateHasChanged();
        }
    }

    private async Task LoadDataAsync()
    {
        if (!datosCargados)
        {
            try
            {
                UserState.Mostrar = true;
                var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
                DateTime fecha = DateTime.Now;
                Expression<Func<PERSONAS, bool>> filtro = x =>
                    x.FECHACUMPLIMIENTOPROXTRIENIO.HasValue &&
                    x.FECHACUMPLIMIENTOPROXTRIENIO <= fecha &&
                    (x.FECHABAJA == null || x.FECHABAJA.HasValue && x.IDSITUACIONADMINISTRATIVARPTNavigation.LITERAL_SITUACION == "SERVICIOS ESPECIALES");
                listPersonas = await Utilidades.ObtenerObjeto<List<PERSONAS>>(cliente, "/api/PERSONAS/filtrar", filtro);
                datosCargados = true;
                UserState.Mostrar = false;
            }
            catch (Exception e)
            {
                UserState.Mostrar = false;
                Console.WriteLine($"Error al obtener los datos: {e.Message}");
            }
        }
    }
}
