@page "/CuentasCotizacion"
@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

<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="pagina">
    <div class="d-flex">
        <div class="cabecera">
            <h6 style="padding-top: 13px;padding-right: 15px;">
                <b>Cuentas Cotización</b>
            </h6>
        </div>
        <a href="/CuentaCotizacion" class="btnOAAFAzul" style="text-decoration:none">Nuevo </a>
    </div>

    @if (lCuentasCotizacion == null)
    {
        <div id="cargando" class="loadingFrame">
            <div class="loadingImg"></div>
        </div>
    }
    else if (!lCuentasCotizacion.Any())
    {
        <p>No se encontraron datos para mostrar.</p>
    }
    else
    {
        <div class="botonera col-12 gap-1" style="display:flex;" role="group">
        </div>
        <div style="display:flex; justify-content:start; gap:15px;width:100%"></div>
        <div class="form-group mt-4 mb-4">
            <input class="form-control" type="text" placeholder="Filtrar..."
                   @bind-value="Filter" @bind-value:event="oninput" />
        </div>

        <div style="overflow-x:auto;" class="">
            <Grid TItem="CUENTASCOTIZACIONPATRONAL"
                  Class="table tablaRegPers"
                  Data="@lCuentasCotizacion"
                  AllowFiltering="false"
                  AllowPaging="false"
                  AllowSorting="true"
                  EmptyText="No se han encontrado datos"
                  Height="80"
                  PageSizeSelectorVisible="false"
                  Responsive="true"
                  PaginationItemsTextFormat="{0} - {1} de {2} elementos">
                <GridColumns>
                    <GridColumn TItem="CUENTASCOTIZACIONPATRONAL" HeaderText="Descripción" PropertyName="NOMBRE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        <NavLink class="btn btn-link" href="@HashRed(context.IDCUENTACOTIZACIONPATRONAL.ToString())">@context.NOMBRE</NavLink>
                    </GridColumn>
                     <GridColumn TItem="CUENTASCOTIZACIONPATRONAL" HeaderText="Descripción" PropertyName="DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.DESCRIPCION
                    </GridColumn> 
                </GridColumns>
            </Grid>
        </div>

        <!-- Vista móvil -->
    }
</div>
@code {
    List<CUENTASCOTIZACIONPATRONAL> lCuentasCotizacion = new List<CUENTASCOTIZACIONPATRONAL>();
    private List<CUENTASCOTIZACIONPATRONAL> cuentasCoti = new List<CUENTASCOTIZACIONPATRONAL>();
    private string _filter = "";

    public string Filter
    {
        get => _filter;
        set
        {
            if (_filter != value)
            {
                _filter = value;
                AplicarFiltros();
            }
        }
    }
    private void AplicarFiltros()
    {
        lCuentasCotizacion = cuentasCoti.Where(per =>
            string.IsNullOrEmpty(Filter) ||
            Utilidades.RemoveDiacritics(per.DESCRIPCION).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase)
            ).ToList();
        UserState.CurrentPage = 1;
    }
    // Bandera que indica si se está en modo "Ver Todos"
    private bool verTodosActive = false;
    List<ToastMessage> mensajes = new List<ToastMessage>();

    protected override async Task OnInitializedAsync()
    {
        verTodosActive = false;
        var token = UserState.Token;
        var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);

        var resultPersonas = await cliente.GetAsync("/api/CUENTASCOTIZACIONPATRONAL");
        var resultContent = await resultPersonas.Content.ReadAsStringAsync();
        cuentasCoti = JsonConvert.DeserializeObject<List<CUENTASCOTIZACIONPATRONAL>>(resultContent) ?? new List<CUENTASCOTIZACIONPATRONAL>();

        cuentasCoti = cuentasCoti.ToList();

        lCuentasCotizacion = cuentasCoti;
    }

    private string HashRed(string id)
    {
        string link = "/CuentaCotizacion?cl=" + tsUtilidades.crypt.FEncS(
            id,
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
            875421649);
        return link;
    }
}

