
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using GestionPersonalWeb.Models
@using BlazorBootstrap
@using bdAntifraude.db
@using Microsoft.AspNetCore.Components
@rendermode InteractiveServer
@inject IJSRuntime JS
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState

<Grid TItem="PERSONAS"
      Class="table tablaRegPers"
      Data="listPers"
      AllowFiltering="false"
      PageSize="10"
      AllowPaging="true"
      AllowSorting="true"
      EmptyText="No se han encontrado datos"
      Height="100"
      PageSizeSelectorVisible="false"
      PageSizeSelectorItems="@(new int[] { 5, 10, 20, 50 })"
      Responsive="true"
      PaginationItemsTextFormat="{0} - {1} de {2} elementos">

    <GridColumns>
        <GridColumn TItem="PERSONAS" HeaderText="Nombre">
            @context.APELLIDOSNOMBRE
        </GridColumn>
        <GridColumn TItem="PERSONAS" HeaderText="NIF">
            @context.NIF
        </GridColumn>
        <GridColumn TItem="PERSONAS" HeaderText="Tipo Persona">
            @context.IDTIPONavigation?.DESCRIPCION
        </GridColumn>
        <GridColumn TItem="PERSONAS" HeaderText="Total Devengado">
            @context.NOMINATRABAJADORCABECERA.FirstOrDefault(x => x.IDNOMINATRABAJADOR == idNom)?.TOTALDEVENGADO
        </GridColumn>
        <GridColumn TItem="PERSONAS" HeaderText="Total Liquido">
            @context.NOMINATRABAJADORCABECERA.FirstOrDefault(x => x.IDNOMINATRABAJADOR == idNom)?.TOTALLIQUIDO
        </GridColumn>
        <GridColumn TItem="PERSONAS" HeaderText="Persona">
            @context.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION
        </GridColumn>
        <GridColumn TItem="PERSONAS" HeaderText="Observaciones">
            @context.NOMINATRABAJADORCABECERA.FirstOrDefault(x => x.IDNOMINATRABAJADOR == idNom)?.OBSERVACIONES
        </GridColumn>
        <GridColumn TItem="PERSONAS" HeaderText="Nivel">
            @context.IDNIVELRPTNavigation?.DESCRIPCION
        </GridColumn>
    </GridColumns>

</Grid>

@code {
    [Parameter]
    public NOMINAS Nomina { get; set; } = new NOMINAS();
    public int? idNom { get; set; }
    [Parameter]
    public EventCallback OnPersonaActualizada { get; set; }

    private List<PERSONAS> listPers = new List<PERSONAS>();

    protected override async Task OnInitializedAsync()
    {
        if (Nomina?.IDNOMINAS!= null && Nomina.IDNOMINAS> 0)
        {
            await ObtListaPers();
        }
        else
        {
            Console.WriteLine("Persona no está completamente cargada.");
        }
    }


    private async Task ObtListaPers()
    {
        try
        {
            var token = UserState.Token;
            var client = HttpClientFactory.CreateClient();
            client.BaseAddress = new Uri(Utilidades.urlSwagger());
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            idNom = Nomina.IDNOMINAS;
            Expression<Func<NOMINATRABAJADORCABECERA, bool>> filtro = x => x.IDNOMINA == idNom;
            var serializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
            var TDExpression = serializer.SerializeText(filtro);
            var TDjsonContent = JsonConvert.SerializeObject(new { Expression = TDExpression });
            var TDcontent = new StringContent(TDjsonContent, Encoding.UTF8, "application/json");
            var TDresponse = await client.PostAsync("/api/NOMINATRABAJADORCABECERA/filtrar", TDcontent);
            var TDCont = await TDresponse.Content.ReadAsStringAsync();
            List<NOMINATRABAJADORCABECERA> LISTNOTRCA = JsonConvert.DeserializeObject<List<NOMINATRABAJADORCABECERA>>(TDCont) ?? new List<NOMINATRABAJADORCABECERA>();
            // List<NOMINATRABAJADORCABECERA> LISTNOTRCA = await Utilidades.ObtenerObjeto<List<NOMINATRABAJADORCABECERA>>(client, "/api/NOMINATRABAJADORCABECERA/filtrar", filtro);
            if (LISTNOTRCA.Count > 0)
            {
                int idNOTRCA = LISTNOTRCA.FirstOrDefault().IDNOMINATRABAJADOR;
                Expression<Func<PERSONAS, bool>> filtro2 = x => x.NOMINATRABAJADORCABECERA.Any(y => y.IDNOMINATRABAJADOR == idNOTRCA);
                listPers = await Utilidades.ObtenerObjeto<List<PERSONAS>>(client, "/api/PERSONAS/filtrar", filtro2);
                // personas = JsonConvert.DeserializeObject<List<PERSONAS>>(resultContent)
                //            ?? new List<PERSONAS>();

                listPers = listPers
                   .OrderBy(x => x.APELLIDOS)
                   .ThenBy(x => x.NOMBRE)
                   .ThenByDescending(x => x.FECHAALTA)
                   .ToList();
            }
                // listPers = Nomina.NOMINATRABAJADORCABECERA
            }
           
        catch (Exception ex)
        {
            string errorMessage = ex.Message;
            Console.WriteLine($"Error durante la inicialización: {ex.Message}");
            throw;
        }


        // listPersonas = personas;
    }
}

