@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

<!--Tabla de datos-->
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="">
    <div class="d-flex">
        <div class="cabecera">
            <h6 style="padding-top: 13px;padding-right: 15px;">
              <b>Conceptos Tipos Puestos de Trabajo</b>
            </h6>
        </div>
        <button @onclick="@(() => abrirPopupModificacion(new CONCEPTOSTIPOSPUESTOSTRABAJO(), true))" class="btnOAAFAzul">Nuevo </button>
    </div>
    <div style="overflow-x:auto;" class="tablaDesk">
        <Grid TItem="CONCEPTOSTIPOSPUESTOSTRABAJO"
              Class="table tablaRegPers"
              Data="itmList"
              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="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="">
                    <button @onclick="@(() => abrirPopupModificacion(@context, false))" class="btnOAAFAzul">Editar</button>
                </GridColumn>
                 <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Concepto General">
                    @lConceptosGenerales.First(x => x.IDCONCEPTOSGENERALES == context.IDCONCEPTOGENERAL).DESCRIPCION
                </GridColumn> 
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Descripcion">
                    @context.DESCRIPCION
                </GridColumn>
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Importe">
                    @context.IMPORTE
                </GridColumn>
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Concepto aplicación presupuestaria">
                    @context.CONCEPTOAPLPRES
                </GridColumn>
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Aplicación presupuestaria">
                    @context.APLICACIONPRESUPUESTARIA
                </GridColumn>
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Cotiza seguridad social" TextAlignment="Alignment.Center">
                    @if (context.COTIZASEGURIDADSOCIAL)
                    {
                        <i class="fa-regular fa-square-check"></i>
                    }
                </GridColumn>
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Cotiza IRPF" TextAlignment="Alignment.Center">
                    @if (context.COTIZAIRPF)
                    {
                        <i class="fa-regular fa-square-check"></i>
                    }
                </GridColumn>
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Retribuciones" TextAlignment="Alignment.Center">
                    @if (context.RETRIBUCIONES)
                    {
                        <i class="fa-regular fa-square-check"></i>
                    }
                </GridColumn>
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Deducciones" TextAlignment="Alignment.Center">
                    @if (context.DEDUCCIONES)
                    {
                        <i class="fa-regular fa-square-check"></i>
                    }
                </GridColumn>
                <GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Extra" TextAlignment="Alignment.Center">
                    @if (context.EXTRA)
                    {
                        <i class="fa-regular fa-square-check"></i>
                    }
                </GridColumn>
            </GridColumns>
        </Grid>

    </div>
</div>
<!--Popup de edicion-->
<EditForm EditContext="@editContext" OnValidSubmit="GuardarCambiosPopup" OnInvalidSubmit="@MostrarErroresPopup" FormName="costeIndiForm">
    <DataAnnotationsValidator></DataAnnotationsValidator>
    <Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
        <BodyTemplate>
            <div class="row">
                <div class="col-md-6">
                    <label for="" class="fw-bold">Concepto General: </label>
                    <InputSelect @bind-Value="ItemEnEdicion.IDCONCEPTOGENERAL" class="form-select">
                        <option value="">Seleccionar</option>
                        @if (lConceptosGenerales != null)
                        {
                            @foreach (var concepto in lConceptosGenerales)
                            {
                                <option value="@concepto.IDCONCEPTOSGENERALES">@concepto.DESCRIPCION</option>
                            }
                        }
                    </InputSelect>
                </div>
                <div class="col-md-6">
                    <label for="txtEDesc" class="fw-bold">Descripción: </label>
                    <input class="form-control" id="txtEDesc" @bind-value="@ItemEnEdicion.DESCRIPCION" />
                </div>
            </div>
            <div class="row mt-3">
                <div class="col-md-4" style="display: flex;
flex-direction: column;
justify-content: flex-end;">
                    <label for="txtEImporte" class="fw-bold" >Importe: </label>
                    <input class="form-control" id="txtEImporte" @bind-value="@ItemEnEdicion.IMPORTE" />
                </div>
                <div class="col-md-4">
                    <label for="txtEConceptoAP" class="fw-bold">Concepto Apl. Pres.: </label>
                    <input class="form-control" id="txtEConceptoAP" @bind-value="@ItemEnEdicion.CONCEPTOAPLPRES" />
                </div>
                <div class="col-md-4">
                    <label for="txtEAP" class="fw-bold">Aplicación Presupuestaria: </label>
                    <input class="form-control" id="txtEAP" @bind-value="@ItemEnEdicion.APLICACIONPRESUPUESTARIA" />
                </div>
            </div>
            <div class="row mt-3">
                <div class="col-md-4">
                    <label for="" class="fw-bold">Cotiza Seg. Social: </label>
                    <input type="checkbox" class="form-check" id="chkECotizaSS" checked="@ItemEnEdicion.COTIZASEGURIDADSOCIAL" @bind-value="@ItemEnEdicion.COTIZASEGURIDADSOCIAL" />
                </div>
                <div class="col-md-4">
                    <label for="" class="fw-bold">Cotiza IRPF: </label>
                    <input type="checkbox" class="form-check" id="chkECotizaIRPF" checked="@ItemEnEdicion.COTIZAIRPF" @bind-value="@ItemEnEdicion.COTIZAIRPF" />
                </div>
                <div class="col-md-4">
                    <label for="" class="fw-bold">Extra: </label>
                    <input type="checkbox" class="form-check" id="chkEEXtra" checked="@ItemEnEdicion.EXTRA" @bind-value="@ItemEnEdicion.EXTRA" />
                </div>
            </div>
            <div class="row">
                <div class="col-md-4">
                    <label for="" class="fw-bold">Retribuciones: </label>
                    <input type="checkbox" class="form-check" id="chkERetribuciones" checked="@ItemEnEdicion.RETRIBUCIONES" @bind-value="@ItemEnEdicion.RETRIBUCIONES" />
                </div>
                <div class="col-md-4">
                    <label for="" class="fw-bold">Deducciones: </label>
                    <input type="checkbox" class="form-check" id="chkEDeducciones" checked="@ItemEnEdicion.DEDUCCIONES" @bind-value="@ItemEnEdicion.DEDUCCIONES" />
                </div>
            </div>
        </BodyTemplate>
        <FooterTemplate>
            <Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
            <Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(EsItemNuevo ? "Añadir" : "Modificar")</Button>
        </FooterTemplate>
    </Modal>
</EditForm>
@code {
    [Parameter]
    public TIPOSPUESTOSTRABAJO PuestoTrabajo { get; set; } = new TIPOSPUESTOSTRABAJO();
    private HttpClient cliente = new HttpClient();
    private List<CONCEPTOSTIPOSPUESTOSTRABAJO> itmList = new List<CONCEPTOSTIPOSPUESTOSTRABAJO>();
    private List<CONCEPTOSGENERALES> lConceptosGenerales = new List<CONCEPTOSGENERALES>();

    private string tituloPopup = "";
    private Modal popupGestionDatos = default;
    private bool EsItemNuevo = false;
    private CONCEPTOSTIPOSPUESTOSTRABAJO ItemEnEdicion { get; set; } = new CONCEPTOSTIPOSPUESTOSTRABAJO();

    private EditContext? editContext;
    List<CONCEPTOSTIPOSPUESTOSTRABAJO> listnom = new List<CONCEPTOSTIPOSPUESTOSTRABAJO>();

    List<ToastMessage> mensajes = new List<ToastMessage>();

    protected override async Task OnInitializedAsync()
    {
        try
        {
            listnom= PuestoTrabajo.CONCEPTOSTIPOSPUESTOSTRABAJO.ToList();
            foreach (CONCEPTOSTIPOSPUESTOSTRABAJO i in listnom) { itmList.Add(i); }
            editContext=new EditContext(listnom);

            cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
            lConceptosGenerales = await Utilidades.ObtenerObjeto<List<CONCEPTOSGENERALES>>(cliente, "/api/CONCEPTOSGENERALES/");
        }
        catch (Exception e)
        {
            Console.WriteLine($"Error al obtener los datos: {e.Message}");
        }
    }

    private async Task abrirPopupModificacion( CONCEPTOSTIPOSPUESTOSTRABAJO objeto, bool esNuevo)
    {
        ItemEnEdicion =  Utilidades.ClonarObjeto(objeto);
        EsItemNuevo = esNuevo;
        if (!EsItemNuevo)
        {
            tituloPopup = "Modificando Concepto Tipo Trabajo";
        }
        else
        {
            tituloPopup = "Nuevo Concepto Tipo Trabajo";
        }

        await popupGestionDatos.ShowAsync();
    }
    private async Task cerrarPopupModificacion()
    {
        await popupGestionDatos.HideAsync();
    }

    // GUARDAR
    private async Task GuardarCambiosPopup()
    {
        try
        {
            ValidarDatos();

            if (!editContext!.GetValidationMessages().Any())
            {
                string accion = EsItemNuevo ? "create" : "update";
                await GestionarDatos(accion);
            }
            else
            {
                mensajes.Add(new ToastMessage
                {
                    Type = ToastType.Warning,
                    Message = $"Debe rellenar los campos obligatorios.",
                    });
            }

        }
        catch (Exception)
        {
            mensajes.Add(new ToastMessage
            {
                Type = ToastType.Danger,
                Message = $"Error al guardar.",
                });
        }

    }
    private async Task GestionarDatos(string accion)
    {
        var copia = new List<CONCEPTOSTIPOSPUESTOSTRABAJO>(itmList);
        cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);

        switch (accion)
        {
            case "update":
                int indice = copia.FindIndex(x => x.IDCONCEPTOSTIPOSPUESTOTRABAJO == ItemEnEdicion.IDCONCEPTOSTIPOSPUESTOTRABAJO);
                if (indice > -1)
                {
                    copia[indice] = ItemEnEdicion;
                }
                var response = await Utilidades.ActualizarObjeto(cliente, "/api/CONCEPTOSTIPOSPUESTOSTRABAJO/" + ItemEnEdicion.IDCONCEPTOSTIPOSPUESTOTRABAJO, ItemEnEdicion, mensajes);

                break;
            case "create":
                ItemEnEdicion.IDTIPOPUESTOSTRABAJO = PuestoTrabajo.IDTIPOPUESTO;
                copia.Add(ItemEnEdicion);
                var responsec = await Utilidades.NuevoObjeto(cliente, "/api/CONCEPTOSTIPOSPUESTOSTRABAJO/", ItemEnEdicion,mensajes);
                break;
            case "delete":

                break;
        }
        cerrarPopupModificacion();
        itmList = copia.ToList();
        await InvokeAsync(StateHasChanged);
    }
    private void ValidarDatos()
    {
        
    }
    private void MostrarErroresPopup()
    {
        // messageStore?.Clear();
        // foreach (var field in new[] { nameof(descripcionItem) })
        // {
        //     ValidarYActualizar(new ChangeEventArgs { Value = typeof(enumeraciones).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
        // }
    }


}
