@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

<div class="tablaTabLateral">
    <input type="button" value="Nueva Incidencia" @onclick="@(() => abrirPopupModificacion(new INCIDENCIAS(), true))" class="mb-2 btnOAAFBlack" />
  <Accordion>
  @foreach (var año in annos.Take(annos.Count))
  {
      // 1) Filtramos todas las incidencias de ese año
      var listadoAño = itmList
          .Where(x => x.AÑONOMINA == año)
          .ToList();

      // 2) Sacamos los meses distintos, ordenados desc.
      var meses = listadoAño
          .Where(x => x.MESNOMINA.HasValue)
          .Select(x => x.MESNOMINA.Value)
          .Distinct()
          .OrderByDescending(m => m)
          .ToList();
            var titulo = "Año Nómina: " + @año;
            <AccordionItem Title="@titulo">
          <Content>
              <Accordion>
                  @foreach (var mes in meses)
                  {
                      // Listado filtrado por mes y año
                      var listadoMes = listadoAño
                          .Where(x => x.MESNOMINA == mes)
                          .ToList();
                      var nombreMes = nombMeses[mes - 1];
                      var tituloMes = $"{mes}-{nombreMes}";

                      <AccordionItem Title="@tituloMes">
                          <Content>
                              <div style="overflow-x:auto;" class="tablaDesk">
                                  <Grid TItem="INCIDENCIAS"
                                        Class="table tablaRegPers"
                                        Data="listadoMes"
                                        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="INCIDENCIAS" HeaderText="">
                                                    <button @onclick="@(() => abrirPopupModificacion(context, false))" class="btnOAAFAzul">Editar</button>
                                                </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Nómina">
                                                 
                                                    @if (context.IDNOMINANavigation != null){
                                                        @context.IDNOMINANavigation.DESCRIPCION
                                                    }                                                   
                                                </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Concepto">
                                                    
                                                        @if (context.IDCONCEPTONOMINANavigation != null){
                                              @context.IDCONCEPTONOMINANavigation.DESCRIPCION
                                               }
                                                 
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Sustituye Concepto">
                                              @if (context.SUSTITUYECONCEPTO)
                                              {
                                                  <i class="fa-regular fa-square-check"></i>
                                              }
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Cotiza Seguridad Social">
                                              @if (context.COTIZASEGURIDADSOCIAL)
                                              {
                                                  <i class="fa-regular fa-square-check"></i>
                                              }
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Texto">
                                              @context.TEXTO
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Cantidad">
                                              @context.CANTIDAD
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Importe">
                                              @context.IMPORTE
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="IRPF">
                                              @context.IRPF
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="IRPF Ficha">
                                              @if (context.IRPFFICHA)
                                              {
                                                  <i class="fa-regular fa-square-check"></i>
                                              }
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="No para IRPF">
                                              @if (context.NOPARAIRPF)
                                              {
                                                  <i class="fa-regular fa-square-check"></i>
                                              }
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Nómina Normal">
                                              @if (context.NOMINANORMAL)
                                              {
                                                  <i class="fa-regular fa-square-check"></i>
                                              }
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Nómina Seguridad Social">
                                              @if (context.NOMINASEGURIDADSOCIAL)
                                              {
                                                  <i class="fa-regular fa-square-check"></i>
                                              }
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Nómina Origen">
                                                    @if (context.IDNOMINANavigation != null){
                                              @context.IDNOMINANavigation.DESCRIPCION
                                                 }
                                          </GridColumn>
                                          <GridColumn TItem="INCIDENCIAS" HeaderText="Apl. Presupuestaria">
                                              @context.APLICACIONPRESUPUESTARIA
                                          </GridColumn>
                                      </GridColumns>
                                  </Grid>
                              </div>
                          </Content>
                      </AccordionItem>
                  }
              </Accordion>
          </Content>
      </AccordionItem>
  }
</Accordion>

    <Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
        <BodyTemplate>
            <div class="row">
                <div class="col-md-12 mb-2">
                    <input list="listNom" id="selNomina" @bind-value="@itmNomina" type="text" style="width:100%" class="form-control" placeholder="Nomina" />
                    <datalist id="listNom">
                       @foreach(NOMINAS nom in lNom)
                       {
                        <option data-value="@nom.IDNOMINAS">@nom.DESCRIPCION</option>
                       }
                    </datalist>
                </div>
                <div class="col-md-12 mb-2">
                    <input list="listCon" id="selCon" @bind-value="@itmConcepto" type="text" style="width:100%" class="form-control" placeholder="Concepto" />
                    <datalist id="listCon">
                        @foreach (CONCEPTOSGENERALES con in lConceptos)
                        {
                            <option data-value="@con.IDCONCEPTOSGENERALES">@con.DESCRIPCION</option>
                        }
                    </datalist>
                </div>
                <div class="col-md-12 mb-2">
                    <label class="fw-bold">Mes y año nomina</label>
                    <input class="form-control" type="month" @bind-value="FECHANOM" />
                </div>
                <div class="col-md-12" style="display:flex; justify-content:space-between">
                  
                    <label for="txtEDesc" class="fw-bold">Sustituye concepto: </label>
                    <input class="" type="checkbox" id="chbSusConcepto" checked="@ItemEnEdicion.SUSTITUYECONCEPTO" />
                    <label for="txtEDesc" class="fw-bold">Cotiza seguridad social: </label>
                    <input class="" type="checkbox" id="chbCotizaSS" checked="@ItemEnEdicion.COTIZASEGURIDADSOCIAL" />
                    </div>
                <div class="col-md-12">
                    <label for="txtEDesc" class="fw-bold">Texto: </label>
                    <input class="form-control" type="text" @bind-value="@ItemEnEdicion.TEXTO" />
                </div>
                    <div class="col-md-12">
                    <label for="txtEDesc" class="fw-bold">Cantidad: </label>
                    <input class="form-control" type="number" @bind-value="@ItemEnEdicion.CANTIDAD" />
                    </div>
                    <div class="col-md-12">
                    <label for="txtEDesc" class="fw-bold">Importe: </label>
                    <input class="form-control" type="number" @bind-value="@ItemEnEdicion.IMPORTE" />
                </div>
                <div class="col-md-12" style="display:flex; justify-content:space-between">
                    <label for="txtEDesc" class="fw-bold">IRPF: </label>
                    <input class="" type="checkbox" id="chbIRPF" checked="@ItemEnEdicion.IRPF" />

                    <label for="txtEDesc" class="fw-bold">IRPF Ficha: </label>
                    <input class="" type="checkbox" id="chbIRPFficha" checked="@ItemEnEdicion.IRPFFICHA" />

                    <label for="txtEDesc" class="fw-bold">No para IRPF: </label>
                    <input class="" type="checkbox" id="chbNominaIRPF" checked="@ItemEnEdicion.NOPARAIRPF" />
                </div>
                <div class="col-md-12" style="display:flex; justify-content:space-between">
                    <label for="txtEDesc" class="fw-bold">Nómina normal: </label>
                    <input class="" type="checkbox" id="chbNominaNormal" checked="@ItemEnEdicion.NOMINANORMAL" />
                    <label for="txtEDesc" class="fw-bold">Nómina seguridad social: </label>
                    <input class="" type="checkbox" id="chbNominaSS" checked="@ItemEnEdicion.NOMINASEGURIDADSOCIAL" />                    
                </div>
                <div class="col-md-12">
                <label for="txtEDesc" class="fw-bold">Apl. Presupuestaria: </label>
                <input class="form-control" type="text" @bind-value="@ItemEnEdicion.APLICACIONPRESUPUESTARIA" />
                </div>
                
            </div>
        </BodyTemplate>
        <FooterTemplate>
            <Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
            @if(ItemEnEdicion.IDINCIDENCIA != 0){
                <Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() =>GestionarDatos(false))">Modificar</Button>
            }
            else
            {
                <Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(true))">Crear</Button>
            }
        </FooterTemplate>
    </Modal>
   
</div>

@code {
    [Parameter]
    public PERSONAS Persona { get; set; } = new PERSONAS();
    private Modal popupGestionDatos = default;
    public int? idNom { get; set; }
    private DateTime FECHANOM { get; set; }
    private string titulo { get; set; }
    private string itmNomina { get; set; }
    private string itmConcepto { get; set; }
    private HttpClient cliente = new HttpClient();
    [Parameter]
    public EventCallback OnPersonaActualizada { get; set; }
    private List<int?> annos = new List<int?>();
    // private List<int?> meses = new List<int?>();
    private List<INCIDENCIAS> itmList = new List<INCIDENCIAS>();
    private List<String> nombMeses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
    private List<NOMINAS> lNom = new List<NOMINAS>();
    private List<CONCEPTOSGENERALES> lConceptos = new List<CONCEPTOSGENERALES>();
    private INCIDENCIAS ItemEnEdicion { get; set; } = new INCIDENCIAS();
    protected override async Task OnInitializedAsync()
    {
        cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
        CargarListas();
    }
    private async Task abrirPopupModificacion(INCIDENCIAS objeto, bool esNuevo)
    {
        ItemEnEdicion = objeto;
        if(objeto.IDINCIDENCIA != 0)
        {
            itmNomina = objeto.IDNOMINANavigation.DESCRIPCION;
            itmConcepto = objeto.IDCONCEPTONOMINANavigation.DESCRIPCION;
            FECHANOM = DateTime.ParseExact( objeto.AÑONOMINA.ToString() + "-" + objeto.MESNOMINA.ToString() + "-01 00:00:00,000", "yyyy-MM-dd HH:mm:ss,fff",
                                       System.Globalization.CultureInfo.InvariantCulture);
        }
        else
        {
            itmNomina = "";
            itmConcepto = "";
            FECHANOM = DateTime.ParseExact( "0001-01-01 00:00:00,000", "yyyy-MM-dd HH:mm:ss,fff",
                                       System.Globalization.CultureInfo.InvariantCulture);
        }
        await popupGestionDatos.ShowAsync();
    }
    private async Task cerrarPopupModificacion()
    {
        await popupGestionDatos.HideAsync();
    }
    private async Task CargarListas()
    {
        try
        {
            itmList.Clear();
            annos.Clear();
            var listnom = Persona.INCIDENCIAS.Where(x => x.ESDELIQUIDACION == false).ToList();
            var nominaIncidenciadelcarajo = listnom.FirstOrDefault(x => x.IDINCIDENCIA == 56543);
            foreach (INCIDENCIAS i in listnom){ itmList.Add(i); }
            for (var i = 0; i < itmList.Count; i++)
            {
                int? year = itmList[i].AÑONOMINA;
                if (year.HasValue)
                {
                    if (annos.Contains(year) == false)
                    {
                        annos.Add(year);
                    }
                }
            }
            annos = annos.OrderDescending().ToList();
            var lNomi = await Utilidades.ObtenerObjeto<List<NOMINAS>>(cliente, "/api/NOMINAS");
            lNom = lNomi.OrderBy(x => x.FECHAINICIO).ToList();
            lConceptos = await Utilidades.ObtenerObjeto<List<CONCEPTOSGENERALES>>(cliente, "/api/CONCEPTOSGENERALES/");
            // Task.Delay(1);
            StateHasChanged();

        }
        catch (Exception e)
        {
            Console.WriteLine($"Error al obtener los datos: {e.Message}");
        }
    }
    // GUARDAR
    private async Task GestionarDatos(bool tipo)
    {

        var inci = ItemEnEdicion;
        if (tipo == true)
        {
            inci.IDINCIDENCIA = 0;
        }
        inci.IDPERSONA = Persona.IDPERSONA;
        inci.MESNOMINA = FECHANOM.Month;
        inci.AÑONOMINA = FECHANOM.Year;

        var nomSelect = lNom.FirstOrDefault(x => x.DESCRIPCION == itmNomina);
        var concSelect = lConceptos.FirstOrDefault(x => x.DESCRIPCION == itmConcepto);
        inci.IDNOMINA = nomSelect.IDNOMINAS;
        inci.IDCONCEPTONOMINA = concSelect.IDCONCEPTOSGENERALES;
        string chbSusConcepto = "chbSusConcepto";
        inci.SUSTITUYECONCEPTO = await JS.InvokeAsync<bool>("obtenerCheck", chbSusConcepto);
        string chbCotizaSS = "chbCotizaSS";
        inci.COTIZASEGURIDADSOCIAL = await JS.InvokeAsync<bool>("obtenerCheck", chbCotizaSS);
        string chbIRPFficha = "chbIRPFficha";
        inci.IRPFFICHA= await JS.InvokeAsync<bool>("obtenerCheck", chbIRPFficha);
        string chbNominaIRPF = "chbNominaIRPF";
        inci.NOPARAIRPF = await JS.InvokeAsync<bool>("obtenerCheck", chbNominaIRPF);
        string chbNominaNormal = "chbNominaNormal";
        inci.NOMINANORMAL = await JS.InvokeAsync<bool>("obtenerCheck", chbNominaNormal);
        string chbNominaSS = "chbNominaSS";
        inci.NOMINASEGURIDADSOCIAL = await JS.InvokeAsync<bool>("obtenerCheck", chbNominaSS);

        if(inci.IDINCIDENCIA != 0){        
            var response = await Utilidades.ActualizarObjeto(cliente, "/api/INCIDENCIAS/" + inci.IDINCIDENCIA, inci);
        }
        else
        {
            var response = await Utilidades.NuevoObjeto(cliente, "/api/INCIDENCIAS/", inci);
        }
        await cerrarPopupModificacion();
        var response1 = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{Persona.NIF}");
        if (!response1.IsSuccessStatusCode)
        {
            throw new Exception($"Error al obtener los datos de la persona. Código: {response1.StatusCode}");
        }

        var resultContent = await response1.Content.ReadAsStringAsync();
        Persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
        await CargarListas();
      
    }
}
