@page "/PeriodoSiltra"
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Microsoft.AspNetCore.WebUtilities
@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

<div class="pagina">
    <div class="Cabecera">
        <h6><small><i class="fas fa-user"></i><b> Periodo Siltra</b></small></h6>
    </div>

    @if (PeriodoSiltra == null)
    {
        <div id="cargando" class="loadingFrame">
            <div class="loadingImg"></div>
        </div>
    }   
    else
    {
       <div class="row" style="border:solid 1px black; padding:10px">
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Fecha inicio: </label>
                <input class="form-control" type="date" @bind-value="@PeriodoSiltra.FECHAINICIO" />
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Fecha fin: </label>
                <input class="form-control" type="date" @bind-value="@PeriodoSiltra.FECHAFIN" />
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Días: </label>
                <input class="form-control" @bind-value="@PeriodoSiltra.DIAS" />
            </div>

            <div class="col-md-2">
                <label for="txtsexo" class="fw-bold  widthLabel li-height50">Cuenta cotización: </label>
                <InputSelect @bind-Value="PeriodoSiltra.IDCUENTACOTIZACIONPATRONAL" class="form-select">
                    <option value="">Seleccionar</option>
                    @if (lCuentaCoti != null)
                    {
                        @foreach (var enumera in lCuentaCoti)
                        {
                            <option value="@enumera.IDCUENTACOTIZACIONPATRONAL">@enumera.DESCRIPCION</option>
                        }
                    }
                </InputSelect>
            </div>

            <div class="col-md-2">
                <label for="txtsexo" class="fw-bold  widthLabel li-height50">Tipo liquidación: </label>
                <InputSelect @bind-Value="PeriodoSiltra.IDTIPOLIQUIDACION" class="form-select">
                    <option value="">Seleccionar</option>
                       @if (lTipLiq != null)
                    {
                        @foreach (var enumera in lTipLiq)
                        {
                            <option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
                        }
                    }
                </InputSelect>
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Ocupación: </label>
                <input class="form-control" @bind-value="@PeriodoSiltra.OCUPACION" />
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">CNAE: </label>
                <input class="form-control" @bind-value="@PeriodoSiltra.CNAE" />
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Grupo Tarifa: </label>
                <input class="form-control" @bind-value="@PeriodoSiltra.GRUPOTARIFA" />
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Estado: </label>
                <InputSelect @bind-Value="PeriodoSiltra.IDESTADO" class="form-select">
                    <option value="">Seleccionar</option>
                    @*    @if (lSexo != null)
                    {
                        @foreach (var enumera in lSexo)
                        {
                            <option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
                        }
                    } *@
                </InputSelect>
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Tipo periodo tramo: </label>
                <InputSelect @bind-Value="PeriodoSiltra.IDTIPOPERIODOTRAMO" class="form-select">
                    <option value="">Seleccionar</option>
                       @if (lTipPeriodo != null)
                    {
                        @foreach (var enumera in lTipPeriodo)
                        {
                            <option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
                        }
                    }
                </InputSelect>
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Reducción jornada: </label>
                <input class="form-control" @bind-value="@PeriodoSiltra.REDUCCIONJORNADA" />
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Número días IRPF: </label>
                <input class="form-control" @bind-value="@PeriodoSiltra.NUMERODIASIRPF" />
            </div>
            <div class="col-md-2">
                <label for="txtNIF" class="fw-bold widthLabel li-height50">Importe IRPF: </label>
                <input class="form-control" @bind-value="@PeriodoSiltra.IMPORTEIRPF" />
            </div>
       </div>
       <div class="mt-2">
            <div style="overflow-x:auto;" class="tablaDesk">
                <Grid TItem="TRAMOSSILTRA"
                      Class="table tablaRegPers"
                      Data="@lTraSil"
                      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="TRAMOSSILTRA" HeaderText="Tipo tramo" PropertyName="IDTIPOTRAMONavigation?.DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDTIPOTRAMONavigation.DESCRIPCION">

                            @if (context.IDTIPOTRAMONavigation.MODIFICABLE == false && context.IDTIPOTRAMONavigation.SOLICITADOALUSUARIO == false)
                            {
                                <p style="color:red; font-weight:bold"> @context.IDTIPOTRAMONavigation?.CODIGO - @context.IDTIPOTRAMONavigation?.DESCRIPCION </p>
                            }
                            @if (context.IDTIPOTRAMONavigation.SOLICITADOALUSUARIO == true && context.IDTIPOTRAMONavigation.MODIFICABLE == true)
                            {
                                <p style="color:blue; font-weight:bold"> @context.IDTIPOTRAMONavigation?.CODIGO - @context.IDTIPOTRAMONavigation?.DESCRIPCION </p>
                            }                         
                            @if (context.IDTIPOTRAMONavigation.SOLICITADOALUSUARIO == false && context.IDTIPOTRAMONavigation.MODIFICABLE == true)
                            {
                                <p> @context.IDTIPOTRAMONavigation?.CODIGO - @context.IDTIPOTRAMONavigation?.DESCRIPCION </p>
                            }
                        </GridColumn>
                        <GridColumn TItem="TRAMOSSILTRA" HeaderText="Importe" PropertyName="IMPORTE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IMPORTE">
                            @context.IMPORTE
                        </GridColumn>
                        <GridColumn TItem="TRAMOSSILTRA" HeaderText="% Empresa" PropertyName="PORCENTAJEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.PORCENTAJEEMPRESA">
                            @context.PORCENTAJEEMPRESA
                        </GridColumn>
                        <GridColumn TItem="TRAMOSSILTRA" HeaderText="Importe empresa" PropertyName="IMPORTEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IMPORTEEMPRESA">
                            @context.IMPORTEEMPRESA
                        </GridColumn>
                        <GridColumn TItem="TRAMOSSILTRA" HeaderText="Importe empresa" PropertyName="PORCENTAJETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.PORCENTAJETRABAJADOR">
                            @context.PORCENTAJETRABAJADOR
                        </GridColumn>
                        <GridColumn TItem="TRAMOSSILTRA" HeaderText="Importe empresa" PropertyName="IMPORTETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IMPORTETRABAJADOR">
                            @context.IMPORTETRABAJADOR
                        </GridColumn>
                        <GridColumn TItem="TRAMOSSILTRA" HeaderText="Importe empresa" PropertyName="IMPORTEGLOBAL" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IMPORTEGLOBAL">
                            @context.IMPORTEGLOBAL
                        </GridColumn>
                        <GridColumn TItem="TRAMOSSILTRA" HeaderText="Importe empresa" PropertyName="DESCRIPCIONTRAMOXML" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDTIPOTRAMONavigation.IDTIPOTRAMOFICHEROXMLNavigation.DESCRIPCION">
                            @context.IDTIPOTRAMONavigation.IDTIPOTRAMOFICHEROXMLNavigation.DESCRIPCION
                        </GridColumn>
                    </GridColumns>
                </Grid>
            </div>

       </div>
    }
</div>

@code {
    private PERIODOSSILTRA PeriodoSiltra { get; set; }  
    private List<int> annos = new List<int>();
    private string cl { get; set; }
    private List<CUENTASCOTIZACIONPATRONAL> lCuentaCoti = new List<CUENTASCOTIZACIONPATRONAL>();
    private List<ENUMERACIONES> lTipLiq = new List<ENUMERACIONES>();
    private List<ENUMERACIONES> lEstados = new List<ENUMERACIONES>();
    // private List<TIPOSTRAMOS> lTipPeriodo = new List<TIPOSTRAMOS>();
    private List<ENUMERACIONES> lTipPeriodo = new List<ENUMERACIONES>();
    private List<TRAMOSSILTRA> lTraSil = new List<TRAMOSSILTRA>();


    private string _filter = "";
    public string Filter
    {
        get => _filter;
        set
        {
            if (_filter != value)
            {
                _filter = value;
                // AplicarFiltros();
            }
        }
    }





    private MarkupString FormatearNombre(string nombre)
    {
        if (string.IsNullOrEmpty(nombre))
        {
            return new MarkupString(string.Empty);
        }
        var palabras = nombre.Split(' ');
        if (palabras.Length > 2)
        {
            string primeraParte = string.Join(" ", palabras.Take(2));
            string resto = string.Join(" ", palabras.Skip(2));
            return new MarkupString($"{primeraParte}<br/>{resto}");
        }
        return new MarkupString(nombre);
    }
    protected override async Task OnInitializedAsync()
    {

        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"));


        var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);

        if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
        {
            cl = clValue;
        }

        if (string.IsNullOrEmpty(cl))
        {
            PeriodoSiltra = new PERIODOSSILTRA();

        }        
        string idDesencriptado = tsUtilidades.crypt.FEncS(cl,
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
            -875421649);

        var response = await client.GetAsync($"/api/PERIODOSSILTRA/{idDesencriptado}");
        if (!response.IsSuccessStatusCode)
        {
            throw new Exception($"Error al obtener los datos de la persona. Código: {response.StatusCode}");
        }
        var resultContent = await response.Content.ReadAsStringAsync();
        PeriodoSiltra = JsonConvert.DeserializeObject<PERIODOSSILTRA>(resultContent) ?? throw new Exception("Error al deserializar los datos del Periodo Siltra.");

        foreach (var i in PeriodoSiltra.TRAMOSSILTRA) {
            lTraSil.Add(i);
        }

        
        lTipLiq = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(client, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPLIQ");
        var rlCuentaCoti = await client.GetAsync("/api/CUENTASCOTIZACIONPATRONAL");
        var rcCuentaCoti = await rlCuentaCoti.Content.ReadAsStringAsync();
        lCuentaCoti = JsonConvert.DeserializeObject<List<CUENTASCOTIZACIONPATRONAL>>(rcCuentaCoti) ?? throw new Exception("Error al deserializar los datos.");
        lEstados = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(client, "/api/ENUMERACIONES/EnumeracionesGrupo/MUT");
        lTipPeriodo = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(client, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPPERTRAM");
      


    }
   }