@page "/InfoPers"
@page "/InfoPers/{cl}"
@using BlazorBootstrap
@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

@* <EditForm EditContext="@editContext">
    <DataAnnotationsValidator /> *@

<Modal @ref="popupConfirmacion" Title="Confirmar Guardar persona" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
    <BodyTemplate>
        <p>Se van a dar de alta o modificar datos de la persona seleccionada ¿desea continuar?</p>
    </BodyTemplate>
    <FooterTemplate>
        <Button Color="ButtonColor.Secondary" @onclick="CerrarConfirmacion">Cancelar</Button>

        <Button @onclick="GuardarPersona" Color="ButtonColor.Primary">Aceptar</Button>

    </FooterTemplate>
</Modal>

<div class="datos-personales-container mt-3">
    <div>
        <div>
            <div><input type="button" class="btnOAAFAzul mb-2" value="Guardar persona" @onclick="GuardarPersona" /></div>
            <div class="row flex-grow-1 mb-4">
                <!-- Imagen -->
                <div class="col-xl-2 flex-column">
                    <div class="bin-img-emp-place-holder bin-img-text-panel position-relative imgInfoPersona  d-flex justify-content-center">
                        @if (!string.IsNullOrEmpty(FotoBase64))
                        {
                            <img src="data:image/jpeg;base64,@FotoBase64" alt="Foto de la persona" style="width:auto; height: 100%; overflow:hidden; object-fit: cover;" />
                        }
                        else
                        {
                            <div class="bin-img-tbl d-flex justify-content-center align-items-center h-100">
                                <div>No hay imagen</div>
                            </div>
                        }
                        <!-- Input "oculto" que ocupa el espacio del contenedor -->
                        <InputFile OnChange="@(args => ProcesarImagen(args))" accept="image/*" style="opacity: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%; cursor: pointer;" />
                    </div>
                </div>
                <div class="col-md-10">
                    <div class="row mb-3">
                        <!-- Otros campos del formulario -->
                        <div class="col-md-4">
                            <label for="txtdni" class="fw-bold">D.N.I.: </label>
                            <input class="form-control" id="txtdni" @bind-value="@persona.NIF" />
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtsexo" class="fw-bold">Sexo: </label>
                            <InputSelect @bind-Value="persona.IDSEXO" 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-4">
                            <label for="txtTipPer" class="fw-bold">Tipo Personal: </label>

                            <InputSelect @bind-Value="persona.IDTIPO" class="form-select">
                                <option value="">Seleccionar</option>
                                @if (lTiposPers != null)
                                {
                                    @foreach (var enumera in lTiposPers)
                                    {
                                        <option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
                                    }
                                }
                            </InputSelect>

                            @* <input class="form-control" id="txtTipPer" value="@persona.IDTIPONavigation?.DESCRIPCION" /> *@
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtFeNac" class="fw-bold">Fecha Nacimiento: </label>
                            <input type="date" class="form-control"  id="txtFeNac" @bind-value="@persona.FECHANACIMIENTO" />
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtLuNac" class="fw-bold">Lugar Nacimiento: </label>
                            <input class="form-control" id="txtLuNac"  @bind-value="@persona.LUGARNACIMIENTO" />
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtCodigoAnt" class="fw-bold">Código Antiguo: </label>
                            <input class="form-control" id="txtCodigoAnt" @bind-value="@persona.CODIGOANTIGUODIPUTADO" />
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtApellidos" class="fw-bold">Apellidos: </label>
                            <input class="form-control" id="txtApellidos"  @bind-value="@persona.APELLIDOS" />
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtNombre" class="fw-bold">Nombre: </label>
                            <input class="form-control" id="txtNombre"  @bind-value="@persona.NOMBRE" />
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtNivel" class="fw-bold">Nivel: </label>
                            <input class="form-control" id="txtNivel" @bind-value="@persona.NIVEL" />
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtTiCont" class="fw-bold">Tipo Contrato: </label>
                            <InputSelect @bind-Value="persona.IDCONTRATO" class="form-select">
                                <option value="">Seleccionar</option>
                                @if (lTipoContra != null)
                                {
                                    @foreach (var enumera in lTipoContra)
                                    {
                                        <option value="@enumera.IDCONTRATO"> @enumera.CODIGO - @enumera.DESCRIPCION</option>
                                    }
                                }
                            </InputSelect>
                            @* <input class="form-control" id="txtTiCont" disabled value="@persona.IDCONTRATONavigation?.DESCRIPCION" /> *@
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtGrupo" class="fw-bold">Grupo: </label>

                            <InputSelect @bind-Value="persona.IDGRUPOFUNCIONARIO" class="form-select">
                                <option value="">Seleccionar</option>
                                @if (lGrupo != null)
                                {
                                    @foreach (var enumera in lGrupo)
                                    {
                                        <option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
                                    }
                                }
                            </InputSelect>

                            @* <input class="form-control" id="txtGrupo" disabled value="@persona.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION" /> *@
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtCuentaCotizacion" class="fw-bold">Cuenta Cotización: </label>
                            <InputSelect @bind-Value="persona.IDCUENTACOTIZACIONPATRONAL" class="form-select">
                                <option value="">Seleccionar</option>
                                @if (lCuentaCoti != null)
                                {
                                    @foreach (var enumera in lCuentaCoti)
                                    {
                                        <option value="@enumera.IDCUENTACOTIZACIONPATRONAL">@enumera.CODIGO - @enumera.DESCRIPCION</option>
                                    }
                                }
                            </InputSelect>
                            @* <input class="form-control" id="txtNivel" disabled value="@persona.IDCUENTACOTIZACIONPATRONALNavigation?.CUENTANOMBRE" /> *@
                        </div>
                        <!---->
                        <div class="col-md-4">
                            <label for="txtDepartamento" class="fw-bold">Departamento: </label>
                            <InputSelect @bind-Value="persona.IDDEPARTAMENTO" class="form-select">
                                <option value="">Seleccionar</option>
                                @if (lDepartamento != null)
                                {
                                    @foreach (var enumera in lDepartamento)
                                    {
                                        <option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
                                    }
                                }
                            </InputSelect>
                            @* <input class="form-control" id="txtDepartamento" disabled value="@persona.IDDEPARTAMENTONavigation?.DESCRIPCION" /> *@
                        </div>
                        <div class="col-md-4">
                            <label for="txtDepartamento" class="fw-bold">Ocupación: </label>
                            <InputSelect @bind-Value="persona.IDOCUPACION" class="form-select">
                                <option value="">Seleccionar</option>
                                @if (lOcupacion != null)
                                {
                                    @foreach (var enumera in lOcupacion)
                                    {
                                        <option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
                                    }
                                }
                            </InputSelect>
                            @* <input class="form-control" id="txtDepartamento" disabled value="@persona.IDDEPARTAMENTONavigation?.DESCRIPCION" /> *@
                        </div>

                    </div>
                </div>
            </div>
            <div class="row" style="max-height:415px; overflow-y:auto; overflow-x:hidden">
                <Tabs @ref=tabsDtsPer NavStyle="NavStyle.VerticalUnderline" Class="col-md-2" style="margin-top:25px; font-size:12px; gap:0; width:165px; overflow-y:auto" OnShown="@(args => OnTabShownAsync(args))">
                    <Tab Title="Nóminas" Name="tabNominas">
                        <Content>
                            <NominaGrid Persona="persona"></NominaGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Incidencias" Name="tabIncidencias">
                        <Content>
                            <IncidenciaGrid Persona="persona"></IncidenciaGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Enfermedades" Name="tabEnfermedades">
                        <Content>
                            <EnfermedadesGrid Persona="persona"></EnfermedadesGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Maternidades/Riesgo Embarazo" Name="tabMaternidades">
                        <Content>
                            <MaternidadesGrid Persona="persona"></MaternidadesGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Diferencia Pago Delegado" Name="tabDiferencia">
                        <Content>
                            <MaternidadesGrid Persona="persona"></MaternidadesGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Permisos sin Retribución" Name="tabPermSinRet">
                        <Content>
                            <PermisosSinRetriGrid Persona="persona"></PermisosSinRetriGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Huelgas" Name="tabHuelgas">
                        <Content>
                            <HuelgasGrid Persona="persona"></HuelgasGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Puestos Trabajo" Name="tabPuestos">
                        <Content>
                            <PuestosTrabajoGrid Persona="persona"></PuestosTrabajoGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Otros Datos" Name="tabOtrosDatos">
                        <Content>
                            <OtrosDatosGrid Persona="persona"></OtrosDatosGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Reducciones Jornada" Name="tabRedJorn">
                        <Content>
                            <ReduccionesJornadaGrid Persona="persona"></ReduccionesJornadaGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Trabajadores a Tiempo Parcial" Name="tabTrabTiempoPar">
                        <Content>
                            <TrabajadoresTiempoParcialGrid Persona="persona"></TrabajadoresTiempoParcialGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Sexenios y Quintenios" Name="tabSexeQuinte">
                        <Content>
                            <SexeniosQuinqueniosGrid Persona="persona"></SexeniosQuinqueniosGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Trienios y C. Carrera" Name="tabTriCar">
                        <Content>
                            <TrieniosCarreraGrid Persona="persona"></TrieniosCarreraGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Diferencia de Trienios" Name="tabDifTri">
                        <Content>
                            <DiferenciaTrieniosGrid Persona="persona"></DiferenciaTrieniosGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Préstamos" Name="tabPrestamos">
                        <Content>
                            <PrestamosGrid Persona="persona"></PrestamosGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Retenciones Judiciales" Name="tabRetJudiciales">
                        <Content>
                            <RetencionesJudicialesGrid Persona="persona"></RetencionesJudicialesGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Productividad" Name="tabProductividad">
                        <Content>
                            <ProductividadGrid Persona="persona"></ProductividadGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Hijos" Name="tabHijos">
                        <Content>
                            <HijosGrid Persona="persona"></HijosGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Ascendientes" Name="tabAscendientes">
                        <Content>
                            <AscendientesGrid Persona="persona"></AscendientesGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Otras Retribuciones" Name="tabOtrasRet">
                        <Content>
                            <OtrasRetribucionesGrid Persona="persona"></OtrasRetribucionesGrid>
                        </Content>
                    </Tab>
                    <Tab Title="IRPF (Situación actual)" Name="tabIRPFAct">
                        <Content>
                            <IRPFActGrid Persona="persona"></IRPFActGrid>
                        </Content>
                    </Tab>
                    <Tab Title="IRPF (Historial Regularizaciones)" Name="tabIRPFhist">
                        <Content>
                            <IRPFHistGrid Persona="persona"></IRPFHistGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Expedientes" Name="tabExpedientes">
                        <Content>
                            <ExpedientesGrid Persona="persona"></ExpedientesGrid>
                        </Content>
                    </Tab>
                    <Tab Title="Permisos" Name="tabPermisos">
                        <Content>
                            <PermisosGrid Persona="persona"></PermisosGrid>
                        </Content>
                    </Tab>
                </Tabs>
            </div>
        </div>
    </div>
</div>
@code {
    // pruebaAle
    [Parameter]
    public string? cl { get; set; } = "";
    public bool mostrar { get; set; } = true;
    public bool mostrarBtn { get; set; } = false;
    List<ENUMERACIONES> ListaSexos = new List<ENUMERACIONES>();
    List<ENUMERACIONES> ListaTipos = new List<ENUMERACIONES>();
    private Modal popupCodigosPostales = default!;
    List<MUNICIPIOS> listaCodigosRepes = new List<MUNICIPIOS>();
    private HttpClient cliente = new HttpClient();
    private static PERSONAS persona = new PERSONAS();
    FICHEROS ficheroFoto = new FICHEROS();
    public string FotoBase64 { get; set; } = "";
    public byte[]? FotoBytes { get; set; }  // Parámetro para la foto
    private string lblNombre = "";
    private EditContext editContext = new EditContext(persona);
    private ValidationMessageStore? messageStore;
    private string errorMessage = "";

    private List<ENUMERACIONES> lTiposPers = new List<ENUMERACIONES>();
    private List<CONTRATOS> lTipoContra = new List<CONTRATOS>();
    private List<ENUMERACIONES> lGrupo = new List<ENUMERACIONES>();
    private List<CUENTASCOTIZACIONPATRONAL> lCuentaCoti = new List<CUENTASCOTIZACIONPATRONAL>();
    private List<ENUMERACIONES> lDepartamento = new List<ENUMERACIONES>();
    private List<ENUMERACIONES> lOcupacion = new List<ENUMERACIONES>();
    private List<ENUMERACIONES> lSexo = new List<ENUMERACIONES>();
    private Tabs tabsDtsPer { get; set; } = new Tabs();
    private Modal popupConfirmacion = default!;
    List<ToastMessage> mensajes = new List<ToastMessage>();
    private async Task GuardarPersona()
    {
        CerrarConfirmacion();
        cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
        // ValidarTodos();
        if (!editContext.GetValidationMessages().Any())

        {
            persona.AÑOCAMBIORESIDENCIA = 0;

            //Te quedaste en que tienes que coger la foto del navigation y guardarla (Por cierto el nuevo no aparece en la lista)
            if (persona.IDFICHEROFOTONavigation != null)
            {
                FICHEROS fi = persona.IDFICHEROFOTONavigation;
                if (persona.IDFICHEROFOTO != null)
                {
                    var responsef = await Utilidades.ActualizarObjeto(cliente, "/api/FICHEROS/" + fi.IDFICHERO, fi);
                    //persona.IDFICHEROFOTO = responsef.IDFICHERO;

                }
                else

                {
                    var responsef = await Utilidades.NuevoObjeto(cliente, "/api/FICHEROS", fi);
                    persona.IDFICHEROFOTO = responsef.IDFICHERO;
                }
            }

            if (persona.IDPERSONA == 0)//Nuevo
            {

                var response = await Utilidades.NuevoObjeto(cliente, "/api/PERSONAS", persona);
                string link = "/InfoPers?cl=" + tsUtilidades.crypt.FEncS(response.NIF, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
                NavigationManager.NavigateTo(link, forceLoad: true);

            }
            else//Actualizar
            {
                var personaGuardar = persona;
                personaGuardar.NOMINATRABAJADORCABECERA = null;
                var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/PERSONAS/" + personaGuardar.IDPERSONA, personaGuardar);
                var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
                if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue)) { cl = clValue; }
                cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
                string nifDesencriptado = tsUtilidades.crypt.FEncS(cl,
                    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
                    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
                    -875421649);
                var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{nifDesencriptado}");
                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception($"Error al obtener los datos de la persona. Código: {response.StatusCode}");
                }

                var resultContent = await response.Content.ReadAsStringAsync();
                persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
                mensajes.Add(new ToastMessage
                {
                    Type = ToastType.Primary,
                    Message = $"Guardado correctamente.",
                });
            }
        }
        else
        {
            var html = "";
            html += "Revise los errores antes de guardar:";
            foreach (string m in editContext.GetValidationMessages())
            {
                html += "\n" + m + ". ";
            }

            mensajes.Add(new ToastMessage
            {
                Type = ToastType.Danger,

                Message = html,

            });

        }

    }
    private async Task CerrarConfirmacion()
    {
        await popupConfirmacion.HideAsync();
    }
    private async Task abrirGuardar()
    {
        await popupConfirmacion.ShowAsync();
    }
    private async Task OnTabShownAsync(TabsEventArgs args)
    {
        var panelActivo = args.ActiveTabName;

        await ProtectedSessionStore.SetAsync("ultiTabNom", panelActivo);

    }
    private async Task CargarSelects()
    {
        try
        {

            lTiposPers = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPPER");
            lGrupo = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/GRUPOFUNCIONARIO");
            lDepartamento = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/DEP");
            lOcupacion = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/OCUP");
            lSexo = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
            // lTipoContra = await Utilidades.ObtenerObjeto<List<CONTRATOS>>(cliente, "/api/CONTRATOS");
            var responseTipCon = await cliente.GetAsync("/api/CONTRATOS/");
            if (responseTipCon.IsSuccessStatusCode) { lTipoContra = JsonConvert.DeserializeObject<List<CONTRATOS>>(await responseTipCon.Content.ReadAsStringAsync()); }
            var responseCoti = await cliente.GetAsync("/api/CUENTASCOTIZACIONPATRONAL");
            if (responseCoti.IsSuccessStatusCode) { lCuentaCoti = JsonConvert.DeserializeObject<List<CUENTASCOTIZACIONPATRONAL>>(await responseCoti.Content.ReadAsStringAsync()); }
            StateHasChanged();
        }
        catch (Exception ex)
        {
            errorMessage = ex.Message;
            Console.WriteLine($"Error durante la inicialización: {ex.Message}");
            mostrar = false;
        }

    }
    protected async override Task OnParametersSetAsync()
    {
        await ObtenerFoto();
    }
    protected override async Task OnInitializedAsync()
    {
        try
        {
            var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
     
            if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
            {
                cl = clValue;
            }

            if (string.IsNullOrEmpty(cl))
            {
                persona = new PERSONAS();
                mostrarBtn = true;
            }

            cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
            // ListaSexos = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
            string nifDesencriptado = tsUtilidades.crypt.FEncS(cl,
                "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
                "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
                -875421649);
        
            var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{nifDesencriptado}");
            if (!response.IsSuccessStatusCode)
            {
                throw new Exception($"Error al obtener los datos de la persona. Código: {response.StatusCode}");
            }

            var resultContent = await response.Content.ReadAsStringAsync();
            persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
            lblNombre = persona.NOMBRE + " " + persona.APELLIDOS;
            editContext = new EditContext(persona);
            messageStore = new ValidationMessageStore(editContext);

            mostrar = false;
            await CargarSelects();
        }
        catch (Exception ex)
        {
            errorMessage = ex.Message;
            Console.WriteLine($"Error durante la inicialización: {ex.Message}");
            mostrar = false;
        }
        finally
        {
            mostrar = false;
        }
    }
    protected void volver() { Navigation.NavigateTo("/ListTrabajadores", forceLoad: true); }
    private async Task ObtenerFoto()
    {
        try
        {
            if (persona.IDFICHEROFOTO.HasValue)
            {
                // Crear el cliente utilizando la utilidad
                var client = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);

                // Construir la URI para el endpoint del fichero
                string baseUri = Utilidades.urlSwagger();
                string uri = $"{baseUri}FICHEROS/{persona.IDFICHEROFOTO}";

                // Usar la utilidad para obtener el fichero
                ficheroFoto = await Utilidades.ObtenerObjeto<FICHEROS>(client, uri);

                if (ficheroFoto?.FICHERO != null)
                {
                    FotoBase64 = Convert.ToBase64String(ficheroFoto.FICHERO);
                }
                else
                {
                    FotoBase64 = "";
                    Console.WriteLine("No se encontró una foto asociada al ID.");
                }

            }
            else
            {
                Console.WriteLine("La persona no tiene un ID de foto asociado.");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error al cargar la foto: {ex.Message}");
        }
    }
    private async Task ProcesarImagen(InputFileChangeEventArgs e)
    {
        try
        {
            // Obtén el archivo seleccionado
            IBrowserFile archivo = e.File;

            if (archivo != null)
            {
                // Define el tamaño máximo permitido (por ejemplo, 10 MB)
                const long maxFileSize = 10 * 1024 * 1024;

                // Lee el archivo como un stream
                using var stream = archivo.OpenReadStream(maxFileSize);
                using var memoryStream = new MemoryStream();
                await stream.CopyToAsync(memoryStream);

                // Convierte el archivo a Base64
                //FotoBase64 = Convert.ToBase64String(memoryStream.ToArray());
                FotoBytes = memoryStream.ToArray();

                if (FotoBytes != null)
                {
                    FICHEROS fichero = new FICHEROS();
                    if (ficheroFoto != null)
                    {
                        fichero = ficheroFoto;
                    }

                    fichero.DESCRIPCION = "FOTO PERSONA";
                    fichero.FECHA = DateTime.Now;
                    fichero.NOMBREFICHERO = "foto.png";
                    fichero.FICHERO = FotoBytes;

                    persona.IDFICHEROFOTONavigation = fichero;
                    FotoBase64 = Convert.ToBase64String(FotoBytes);
                }
                // Forza la actualización del componente
                StateHasChanged();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error al procesar la imagen: {ex.Message}");
        }
    }



}
