@page "/Contratos"
@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>Contratos</b>
            </h6>
        </div>
        <a href="/Contrato" class="btnOAAFAzul" style="text-decoration:none">Nuevo </a>
    </div>

    @if (lContratos == null)
    {
        <div id="cargando" class="loadingFrame">
            <div class="loadingImg"></div>
        </div>
    }
    else if (!lContratos.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="CONTRATOS"
                  Class="table tablaRegPers"
                  Data="@lContratos"
                  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="CONTRATOS" HeaderText="Descripción" PropertyName="CODIGO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        <NavLink class="btn btn-link" href="@HashRed(context.IDCONTRATO.ToString())">@context.CODIGO</NavLink>
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Descripción" PropertyName="DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.DESCRIPCION
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Contigencias Comunes Empresa" PropertyName="CONTCOMUNPORCENTEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.CONTCOMUNPORCENTEMPR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Contigencias Comunes Trabajador" PropertyName="CONTCOMUNPORCENTTRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.CONTCOMUNPORCENTTRAB
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Contigencias Comunes Empresa" PropertyName="CONTCOMUNIMPORTEEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.CONTCOMUNIMPORTEEMPR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Contigencias Comunes Trabajador" PropertyName="CONTCOMUNIMPORTETRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.CONTCOMUNIMPORTETRAB
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Formación Profesional Empresa" PropertyName="FORMACIONPROFPORCENTEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.FORMACIONPROFPORCENTEMPR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Formación Profesional Trabajador" PropertyName="FORMACIONPROFPORCENTTRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.FORMACIONPROFPORCENTTRAB
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe Formación Profesional Empresa" PropertyName="FORMACIONPROFIMPORTEEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.FORMACIONPROFIMPORTEEMPR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe Formacion Profesional Trabajador" PropertyName="FORMACIONPROFIMPORTETRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.FORMACIONPROFIMPORTETRAB
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Accidentes IT-IMS CNAE Empresa" PropertyName="ACCITIMSCNAEPORCENTEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.ACCITIMSCNAEPORCENTEMPR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Accidentes IT-IMS CNAE Trabajador" PropertyName="ACCITIMSCNAEPORCENTTRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.ACCITIMSCNAEPORCENTTRAB
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe Accidentes IT-IMS CNAE Empresa" PropertyName="ACCITIMSCNAEIMPORTEEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.ACCITIMSCNAEIMPORTEEMPR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe Accidentes IT-IMS CNAE Trabajador" PropertyName="ACCITIMSCNAEIMPORTEEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.ACCITIMSCNAEIMPORTEEMPR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Desempleo Empresa" PropertyName="DESEMPLEOPORCENTAJEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.DESEMPLEOPORCENTAJEEMPRESA
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% Desempleo Trabajador" PropertyName="DESEMPLEOPORCENTAJETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.DESEMPLEOPORCENTAJETRABAJADOR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe Desempleo Empresa" PropertyName="DESEMPLEOIMPORTEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.DESEMPLEOIMPORTEEMPRESA
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe Desempleo Trabajador" PropertyName="DESEMPLEOIMPORTETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.DESEMPLEOIMPORTETRABAJADOR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% FOGASA Empresa" PropertyName="FOGASAPORCENTAJEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.FOGASAPORCENTAJEEMPRESA
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% FOGASA Trabajador" PropertyName="FOGASAPORCENTAJETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.FOGASAPORCENTAJETRABAJADOR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe FOGASA Empresa" PropertyName="FOGASAIMPORTEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.FOGASAIMPORTEEMPRESA
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe FOGASA Trabajador" PropertyName="FOGASAIMPORTETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.FOGASAIMPORTETRABAJADOR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% MEI Empresa" PropertyName="MEIPORCENTAJEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.MEIPORCENTAJEEMPRESA
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="% MEI Trabajador" PropertyName="MEIPORCENTAJETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.MEIPORCENTAJETRABAJADOR
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe MEI Empresa" PropertyName="MEIIMPORTEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.MEIIMPORTEEMPRESA
                    </GridColumn>
                    <GridColumn TItem="CONTRATOS" HeaderText="Importe MEI Trabajador" PropertyName="MEIIMPORTETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
                        @context.MEIIMPORTETRABAJADOR
                    </GridColumn>
                </GridColumns>
            </Grid>
        </div>

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

    public string Filter
    {
        get => _filter;
        set
        {
            if (_filter != value)
            {
                _filter = value;
                AplicarFiltros();
            }
        }
    }
    private void AplicarFiltros()
    {
        lContratos = contratos.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>();

    private async Task ToggleVerTodos()
    {
        if (!verTodosActive)
        {
            verTodosActive = true;
            var token = UserState.Token;
            var client = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);

            var resultPersonas = await client.GetAsync("/CONTRATOS");
            var resultContent = await resultPersonas.Content.ReadAsStringAsync();
            contratos = JsonConvert.DeserializeObject<List<CONTRATOS>>(resultContent)
                       ?? new List<CONTRATOS>();
        }
        else
        {
            verTodosActive = false;
            var token = UserState.Token;
            var client = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);

            var resultPersonas = await client.GetAsync("/api/CONTRATOS");
            var resultContent = await resultPersonas.Content.ReadAsStringAsync();
            contratos = JsonConvert.DeserializeObject<List<CONTRATOS>>(resultContent)
                       ?? new List<CONTRATOS>();
        }

        contratos = contratos.ToList();

        lContratos = contratos;
        UserState.CurrentPage = 1;
        Filter = "";
    }

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

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

        contratos = contratos.ToList();

        lContratos = contratos;
    }

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

