@page "/CuentaCotizacion"
@page "/CuentaCotizacion/{cl}"
@using BlazorBootstrap
@using GestionPersonalWeb.Components.Pages.FicherosMaestros.TipoPuestoTrabajoComponents
@using Newtonsoft.Json
@using GestionPersonalWeb.Components.Layout
@using Microsoft.AspNetCore.WebUtilities
@using GestionPersonalWeb.Components.Pages.InfoPersComponents
@using GestionPersonalWeb.Models
@using System.Linq.Expressions
@using Serialize.Linq.Serializers
@using System.Net.Http.Headers
@using bdAntifraude.clases
@using bdAntifraude.db
@using System.Reflection
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject IJSRuntime JSRuntime
@inject IJSRuntime JS
@rendermode InteractiveServer
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
@inject ProtectedSessionStorage ProtectedSessionStore
@inject NavigationManager Navigation


@*     <div class="Cabecera">
        <h6><small><i class="fas fa-user"></i><b> Tipo puesto de trabajo: @puestoTrabajo.DESCRIPCION </b></small></h6>
    </div> *@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="datos-personales-container mt-3">
    <div>
        <div>
            <div><input type="button" class="btnOAAFAzul mb-2" value="Guardar Cuenta Cotización" @onclick="GuardarPuestoTrabajo" /></div>
            <div class="" style=" padding: 20px;border:solid 1px grey">
                <div class="col-md-12 mb-3">
                        <h6><b> Cuenta Cotizacion Patronal</b></h6>
                </div>
                <div class="col-md-12">
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Codigo: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.CODIGO" />
                        </div>
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Descripcion: </label>
                            <input class="form-control" id="txtDescripcion" @bind-value="@iCuentaContizacion.REGIMEN" />
                        </div>
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Descripcion: </label>
                            <input class="form-control" id="txtDescripcion" @bind-value="@iCuentaContizacion.AUTORIZADO" />
                        </div>
                    </div>
                    <div class="row mb-3">
                        <div class="col-md-2">
                            <label for="" class="fw-bold">Funcionario: </label>
                            <input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.FUNCIONARIO" @bind-value="@iCuentaContizacion.FUNCIONARIO" />
                        </div>
                        <div class="col-md-2">
                            <label for="" class="fw-bold">Laboral: </label>
                            <input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.LABORAL" @bind-value="@iCuentaContizacion.LABORAL" />
                        </div>
                        <div class="col-md-2">
                            <label for="" class="fw-bold">Obsoleto: </label>
                            <input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.EVENTUAL" @bind-value="@iCuentaContizacion.EVENTUAL" />
                        </div>
                        <div class="col-md-2">
                            <label for="" class="fw-bold">Interino: </label>
                            <input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.INTERINO" @bind-value="@iCuentaContizacion.INTERINO" />
                        </div>
                        <div class="col-md-2">
                            <label for="" class="fw-bold">Alto Cargo: </label>
                            <input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.ALTOCARGO" @bind-value="@iCuentaContizacion.ALTOCARGO" />
                        </div>
                        <div class="col-md-2">
                            <label for="" class="fw-bold">Diputado en asignación: </label>
                            <input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.DIPUTADOSENASIGNACION" @bind-value="@iCuentaContizacion.DIPUTADOSENASIGNACION" />
                        </div>
                    </div>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Nombre: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.NOMBRE" />
                        </div>
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Descripcion: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.DESCRIPCION" />
                        </div>
                    </div>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Entidad y ATyEP: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.ENTIDAD" />
                        </div>
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">IPF: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.IPF" />
                        </div>
                    </div>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">IBAN Liquidaciones Deudoras: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.IBANLIQUIDACIONESDEUDORAS" />
                        </div>
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">IBAN Liquidaciones Acreedoras: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.IBANLIQUIDACIONESACREEDORAS" />
                        </div>
                    </div>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Letra Identificación Fichero: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.LETRAIDENTIFICACIONFICHERO" />
                        </div>
                    </div>
                </div>
                <div class="mt-3" style=" padding: 20px;border:solid 1px grey">
                    <div class="col-md-12 mb-3">
                        <h6><b> Coeficientes Reductores, Contigencias Excluidas </b></h6>
                    </div>
                    <div class="col-md-12">
                        <div class="row mb-3">
                            <div class="col-md-4">
                                <label for="txtdni" class="fw-bold">Coeficiente Reductor Empresa: </label>
                                <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.COEFICIENTEREDUCTOREMPRESA" />
                            </div>
                            <div class="col-md-4">
                                <label for="txtdni" class="fw-bold">Coeficiente Reductor Trabajador: </label>
                                <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.COEFICIENTEREDUCTORTRABAJADOR" />
                            </div>
                            <div class="col-md-4">
                                <label for="txtdni" class="fw-bold">Coeficiente Reductor Total: </label>
                                <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.COEFICIENTEREDUCTORTOTAL" />
                            </div>
                        </div>
                    </div>
                </div>
            </div>
           
            <div class="mt-3 mb-5" style=" padding: 20px;border:solid 1px grey">
                <div class="col-md-12 mb-3">
                    <h6><b> Datos del titular </b></h6>
                </div>
                <div class="col-md-12">
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Tipo IPF: </label>
                            <InputSelect @bind-Value="@iCuentaContizacion.IDTITULARTIPOIPF" class="form-select">
                                <option value="">Seleccionar</option>
                                @if (lTipoIPF != null)
                                {
                                    @foreach (var enumera in lTipoIPF)
                                    {
                                        <option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
                                    }
                                }
                            </InputSelect>
                        </div>
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">IPF: </label>
                            <input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.IPF" />
                        </div>
                    </div>
                </div>
                <div class="col-md-12">
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Nombre: </label>
                            <input class="form-control" id="txtdni" @bind-value="@iCuentaContizacion.TITULARNOMBRE" />
                        </div>
                    </div>
                </div>
                <div class="col-md-12">
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Fecha Alta: </label>
                            <input type="date" class="form-control" id="txtEFecha" @bind-value="@iCuentaContizacion.FECHAALTA" />
                        </div>
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">Fecha Baja: </label>
                            <input type="date" class="form-control" id="txtEFecha" @bind-value="@iCuentaContizacion.FECHABAJA" />
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>



@code {
    [Parameter]
    public string? cl { get; set; } = "";
    private static bdAntifraude.db.CUENTASCOTIZACIONPATRONAL iCuentaContizacion = new CUENTASCOTIZACIONPATRONAL();
    private EditContext editContext = new EditContext(iCuentaContizacion);

    private HttpClient cliente = new HttpClient();
    private ValidationMessageStore? messageStore;
    private string errorMessage = "";
    List<ToastMessage> mensajes = new List<ToastMessage>();
    public bool mostrar { get; set; } = true;
    public bool mostrarBtn { get; set; } = false;

    private List<ENUMERACIONES> lTipoIPF = new List<ENUMERACIONES>();



    protected override async Task OnInitializedAsync()
    {
        try
        {
            var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
            cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);

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

            if (string.IsNullOrEmpty(cl))
            {
                iCuentaContizacion = new CUENTASCOTIZACIONPATRONAL();
                mostrarBtn = true;
            }
            else
            {
                string idDesencriptado = Utilidades.Desencriptar(cl);
                int id = int.Parse(idDesencriptado);

                var response = await cliente.GetAsync($"/api/CUENTASCOTIZACIONPATRONAL/{id}");
                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception($"Error al obtener los datos. Código: {response.StatusCode}");
                }
                var resultContent = await response.Content.ReadAsStringAsync();
                iCuentaContizacion = JsonConvert.DeserializeObject<CUENTASCOTIZACIONPATRONAL>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
            }
            editContext = new EditContext(iCuentaContizacion);
            messageStore = new ValidationMessageStore(editContext);

            mostrar = false;

            lTipoIPF = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPIPF");
        }
        catch (Exception ex)
        {
            errorMessage = ex.Message;
            Console.WriteLine($"Error durante la inicialización: {ex.Message}");
            mostrar = false;
        }
        finally
        {
            mostrar = false;
        }
    }

    private async Task GuardarPuestoTrabajo()
    {
        cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
        if (!editContext.GetValidationMessages().Any())
        {
            if (iCuentaContizacion.IDCUENTACOTIZACIONPATRONAL == 0)//Nuevo
            {
                var response = await Utilidades.NuevoObjeto(cliente, "/api/CUENTASCOTIZACIONPATRONAL", iCuentaContizacion, mensajes);
                if (response != null)
                {
                    iCuentaContizacion = response;
                }
                else
                {
                    mensajes.Add(new ToastMessage
                    {
                        Type = ToastType.Success,
                        Message = $"Guardado Correctamente.",
                    });
                }
                await InvokeAsync(StateHasChanged);
            }
            else//Guardar
            {
                var response = await Utilidades.ActualizarObjeto(cliente, "/api/CUENTASCOTIZACIONPATRONAL/" + iCuentaContizacion.IDCUENTACOTIZACIONPATRONAL, iCuentaContizacion, mensajes);
            }
        }
        else
        {
            mensajes.Add(new ToastMessage
            {
                Type = ToastType.Danger,
                Message = Utilidades.ListaErroresHtml(editContext.GetValidationMessages()),
            });
        
        }
    }

}
