@using BlazorBootstrap
@using Newtonsoft.Json
@using RegistroPersonalAN.Models
@using Serialize.Linq.Serializers
@using System.Linq.Expressions
@using System.Net.Http.Headers
@using System.Text
@using bdAntifraude.db
@using bdAntifraude.clases

@inject IJSRuntime JS   
@inject UserState UserState
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager NavigationManager

<div class="d-flex justify-content-between mt-3">
    <div>
        <button class="btnOAAFAzul">Exportar Excel</button>
        <button class="btnOAAFAzul">Exportar PDF</button>
    </div>
</div>

<Grid TItem="PuestoPersona"
      Class="table tablaRegPers"
      Data="puestosItems"
      AllowFiltering="false"
      PageSize="10"
      AllowPaging="true"
      AllowSorting="true"
      Height="100"
      EmptyText="No se han encontrado datos"
      PageSizeSelectorVisible="false"
      PageSizeSelectorItems="@(new int[] { 5, 10, 20, 50 })"
      Responsive="true"
      PaginationItemsTextFormat="{0} - {1} de {2} elementos">
    <GridColumns>
        <!-- Columna sin PropertyName para evitar conflictos y usar un Template -->
        <GridColumn TItem="PuestoPersona" HeaderText="Puesto de trabajo">
            <div>@((MarkupString)FormatPuesto(context.Puesto))</div>
        </GridColumn>
        <GridColumn TItem="PuestoPersona" HeaderText="Nivel" PropertyName="Nivel">
            @context.Nivel
        </GridColumn>
        <GridColumn TItem="PuestoPersona" HeaderText="Clase Personal" PropertyName="Adscripcion">
            @context.Adscripcion
        </GridColumn>
        <GridColumn TItem="PuestoPersona" HeaderText="Grupo" PropertyName="Grupo">
            @context.Grupo
        </GridColumn>
        <GridColumn TItem="PuestoPersona" HeaderText="Fecha Inicio" PropertyName="FechaToPo">
            @if (context.FechaToPo.ToString("dd/MM/yyyy") != "01/01/0001")
            {
                @context.FechaToPo.ToString("dd/MM/yyyy")
            }
        </GridColumn>
        <GridColumn TItem="PuestoPersona" HeaderText="Caracter Ocupación" PropertyName="CaracterOcu">
            @context.CaracterOcu
        </GridColumn>
        <GridColumn TItem="PuestoPersona" HeaderText="Fecha Fin" PropertyName="FechaCese">
            @if (context.FechaCese.ToString("dd/MM/yyyy") != "01/01/0001")
            {
                @context.FechaCese.ToString("dd/MM/yyyy")
            }
        </GridColumn>
        <GridColumns>
            <GridColumn TItem="PuestoPersona" HeaderText="Años" PropertyName="AnosSer">
                @context.AnosSer
            </GridColumn>
            <GridColumn TItem="PuestoPersona" HeaderText="Meses" PropertyName="MesesSer">
                @context.MesesSer
            </GridColumn>
            <GridColumn TItem="PuestoPersona" HeaderText="Días" PropertyName="DiasSer">
                @context.DiasSer
            </GridColumn>
        </GridColumns>
    </GridColumns>
</Grid>

@code {
    [Parameter]
    public PERSONAS Persona { get; set; } = new PERSONAS();

    private List<PuestoPersona> puestosItems = new();
    private HttpClient cliente = new HttpClient();
    private PuestoPersona itemSeleccionado = new PuestoPersona();
    List<ToastMessage> mensajes = new List<ToastMessage>();

    protected override async Task OnInitializedAsync()
    {
        if (Persona?.IDPERSONA != null && Persona.IDPERSONA > 0)
        {
            await CargarPuestos();
        }
        else
        {
            Console.WriteLine("Persona no está completamente cargada.");
        }
    }
    private async Task CargarPuestos()
    {
        cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
        await ObtenerLista();
    }
    private async Task ObtenerLista()
    {
        puestosItems = await Utilidades.ObtenerObjeto<List<PuestoPersona>>(
            cliente, "/api/VIDA_ADMINISTRATIVA/puestospersona/" + Persona.IDPERSONA);
    }
    // Función que formatea la cadena y separa cada sección en párrafos.
    private string FormatPuesto(string raw)
    {
        if (string.IsNullOrWhiteSpace(raw))
        {
            return "<p>No hay datos</p>";
        }
        // Se insertan etiquetas HTML para separar y resaltar cada sección.
        var formatted = raw.Replace("Código:", "<strong>Código:</strong>")
                           .Replace(" Departamento:", "</p><p><strong>Departamento:</strong> ")
                           .Replace(" Puesto:", "</p><p><strong>Puesto:</strong> ");
        formatted = "<p>" + formatted + "</p>";
        return formatted;
    }
    
    private async Task btnExportarPDF()
    {
        var itm = puestosItems
      .Select(f => new
      {
          Puesto = (MarkupString)FormatPuesto(f.Puesto),
          nivel = f.Nivel,
          Clase_Personal = f.Adscripcion,
          Grupo = f.Grupo,
          Fecha_Inicio = f.FechaToPo.ToString("dd/MM/yyyy") ?? "",
          Caracter_Ocupación = f.CaracterOcu,
          Fecha_Fin = f.FechaCese.ToString("dd/MM/yyyy") ?? "",
          Años = f.AnosSer,
          Meses = f.MesesSer,
          Días = f.DiasSer
      })
      .ToList();
      var logoBytes = await File.ReadAllBytesAsync("wwwroot/Content/imagenes/1oaaflogo.png");

        // Color de cabecera para PDF
        var pdfHeaderColor = new MigraDocCore.DocumentObjectModel.Color(0, 85, 135);

        await Utilidades.ExportarPdfEnBrowser(
            JS,
            itm,
            logoBytes,
            pdfHeaderColor,
        $"Puestos_{Persona.APELLIDOS}_{Persona.NOMBRE}.pdf");
    }
    private async Task btnExportarExcel()
    {
        var itm = puestosItems
     .Select(f => new
     {
         Puesto = (MarkupString)FormatPuesto(f.Puesto),
         nivel = f.Nivel,
         Clase_Personal = f.Adscripcion,
         Grupo = f.Grupo,
         Fecha_Inicio = f.FechaToPo.ToString("dd/MM/yyyy") ?? "",
         Caracter_Ocupación = f.CaracterOcu,
         Fecha_Fin = f.FechaCese.ToString("dd/MM/yyyy") ?? "",
         Años = f.AnosSer,
         Meses = f.MesesSer,
         Días = f.DiasSer
     })
     .ToList();

        // 2) Carga tu logo (por ejemplo desde wwwroot/images/logo.png)
        var logoBytes = await File.ReadAllBytesAsync("wwwroot/Content/imagenes/1oaaflogo.png");

        // 3) Define el color de cabecera para Excel
        var excelHeaderColor = ClosedXML.Excel.XLColor.FromArgb(0, 85, 135);

        // 4) Llama a tu helper pasando logo y color
        await Utilidades.ExportarExcelEnBrowser(
            JS,
            itm,
            logoBytes,
            excelHeaderColor,
            $"Puestos_{Persona.APELLIDOS}_{Persona.NOMBRE}.xlsx");

        // await Utilidades.ExportarExcelEnBrowser(JS, itm, $"Puestos_{Persona.APELLIDOS}_{Persona.NOMBRE}.xlsx");

    }



}

@* Helper para descargar archivos desde base64 *@
<script>
    window.saveAsFile = (filename, bytesBase64) => {
        const link = document.createElement('a');
        link.download = filename;
        link.href = 'data:application/octet-stream;base64,' + bytesBase64;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    };
</script>
