@page "/RPT"
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using RegistroPersonalAN.Models
@using BlazorBootstrap
@using bdAntifraude.db
@rendermode InteractiveServer
@inject IJSRuntime JS
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
@inject NavigationManager Navigation




<div class="pagina">
    @if (mostrar)
    {
        <div id="cargando" class="loadingFrame">
            <div class="loadingImg"></div>
        </div>
    }

    <div class="Cabecera">
        <h6><small><i class="fas fa-id-card"></i><b> RPT</b></small></h6>
    </div>

    @if (listRPT == null)
    {

        <p>Cargando datos...</p>
    }
    else if (!listRPT.Any())
    {

        <div class="gap-1" style="display:flex;margin-block:15px">
            <input type="button" value="Nueva RPT" onclick="window.location.href='/DesgloseRPT';" class="btnOAAFBlack" />
            <input type="button" value="Exportar Excel" @onclick="btnExportarExcel" class="btnOAAFBlack" />
            <input type="button" value="Exportar PDF" @onclick="btnExportarPDF" class="btnOAAFBlack" />
        </div>

        <p>No se encontraron datos para mostrar.</p>
    }
    else
    {
        @*   <div class="form-group">
    <input class="form-control" type="text" placeholder="Filter..."
    @bind:event="oninput">
    </div> *@
        <div class="gap-1" style="display:flex;margin-block:15px">
            <input type="button" value="Nueva RPT" onclick="window.location.href='/DesgloseRPT';" class="btnOAAFBlack" />
            <input type="button" value="Exportar Excel" @onclick="btnExportarExcel" class="btnOAAFBlack" />
            <input type="button" value="Exportar PDF" @onclick="btnExportarPDF" class="btnOAAFBlack" />
        </div>
        <div class="tablaDesk">
        <Grid TItem="bdAntifraude.db.RPT"
              Class="table tablaRegPers"
              Data="listRPT"
              AllowFiltering="false"
              PageSize="10"
              AllowPaging="true"
              AllowSorting="true"
              EmptyText="No se han encontrado datos"
              Height="100"
              PageSizeSelectorVisible="false"
              Responsive="true"
              PaginationItemsTextFormat="{0} - {1} de {2} elementos">

            <GridColumns>
                <GridColumn TItem="bdAntifraude .db.RPT" HeaderText="RPT" PropertyName="IDRPT">
                    <a href="@HashRed(context.IDRPT)">@context.DESCRIPCION</a>
                </GridColumn>
                <GridColumn TItem="bdAntifraude.db.RPT" HeaderText="Ejercicio" PropertyName="EJERCICIO">
                    @context.EJERCICIO
                </GridColumn>
                    <GridColumn TItem="bdAntifraude.db.RPT" HeaderText="Fecha Mesa Parlamento" PropertyName="F_PLENO">
                    @context.F_PLENO?.ToString("dd/MM/yyyy")
                </GridColumn>
                <GridColumn TItem="bdAntifraude.db.RPT" HeaderText="Fecha Oficina" PropertyName="F_PARLAMENTO">
                    @context.F_PARLAMENTO?.ToString("dd/MM/yyyy")
                </GridColumn>
                <GridColumn TItem="bdAntifraude.db.RPT" HeaderText="Fecha Inicio" PropertyName="FECHAINICIO">
                    @context.FECHAINICIO?.ToString("dd/MM/yyyy")
                </GridColumn>
                <GridColumn TItem="bdAntifraude.db.RPT" HeaderText="Fecha Fin" PropertyName="FECHAFIN">
                    @context.FECHAFIN?.ToString("dd/MM/yyyy")
                </GridColumn>
                <GridColumn TItem="bdAntifraude.db.RPT" HeaderText="Situación" PropertyName="IDSITUACIONNavigation">
                    @context.IDSITUACIONNavigation?.DESCRIPCION
                </GridColumn>
            </GridColumns>

        </Grid>
        </div>
        <div class="tablaMov">
            @foreach (var itm in listRPT)
            {
                var collapseId = $"collapse{itm.IDRPT}";
                <div class="card collapse-card Aceptada">
                    <div class="card-header mb-1" data-bs-toggle="collapse" data-bs-target="#@collapseId" aria-expanded="false" aria-controls="@collapseId">
                        <h5 class="mb-0">@itm.DESCRIPCION</h5>
                    </div>
                    <div id="@collapseId" class="collapse">
                        <div class="card-body">
                            <dl class="row">

                                <dt class="col-sm-3">RPT</dt>
                                <dd class="col-sm-9"><a href="@HashRed(itm.IDRPT)">@itm.DESCRIPCION</a></dd>

                                <dt class="col-sm-3">Ejercicio</dt>
                                <dd class="col-sm-9">@itm.EJERCICIO</dd>

                                <dt class="col-sm-3">Fecha Pleno</dt>
                                <dd class="col-sm-9">@itm.F_PLENO?.ToString("dd/MM/yyyy")</dd>

                                <dt class="col-sm-3">Fecha Oficina</dt>
                                <dd class="col-sm-9">@itm.F_PARLAMENTO?.ToString("dd/MM/yyyy")</dd>

                                <dt class="col-sm-3">Fecha Inicio</dt>
                                <dd class="col-sm-9">@itm.FECHAINICIO?.ToString("dd/MM/yyyy")</dd>

                                <dt class="col-sm-3">Fecha Fin</dt>
                                <dd class="col-sm-9">@itm.FECHAFIN?.ToString("dd/MM/yyyy")</dd>

                                <dt class="col-sm-3">Situación</dt>
                                <dd class="col-sm-9">@itm.IDSITUACIONNavigation?.DESCRIPCION</dd>                                
                            </dl>
                        </div>
                    </div>
                </div>
                }
    
</div>
}
</div>
@code {
    private List<bdAntifraude.db.RPT> listRPT = new List<bdAntifraude.db.RPT>();
    private HttpClient cliente = new HttpClient();
    public bool mostrar { get; set; } = true;

    private string HashRed(int id)
    {
        string link = "/DesgloseRPT?cl=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
        return link;
    }
    protected override async Task OnInitializedAsync()
    {
        try
        {

            cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);


            listRPT = await Utilidades.ObtenerObjeto<List<bdAntifraude.db.RPT>>(cliente, "/api/RPT");
            mostrar = false;
        }
        catch (Exception e)
        {
            Console.WriteLine($"Error al obtener los datos: {e.Message}");
        }
    }
    private async Task btnExportarPDF()
    {
        var itm = listRPT
      .Select(f => new
      {
          RPT = f.DESCRIPCION,
          Ejercicio = f.EJERCICIO,
          Fecha_Mesa_Parlamento = f.F_PLENO?.ToString("dd/MM/yyyy"),
          Fecha_Oficina = f.F_PARLAMENTO?.ToString("dd/MM/yyyy"),
          Fecha_Inicio = f.FECHAINICIO?.ToString("dd/MM/yyyy"),
          Fecha_Fin = f.FECHAFIN?.ToString("dd/MM/yyyy"),
          Situación = f.IDSITUACIONNavigation?.DESCRIPCION

      })
      .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,
        $"RPT.pdf");
    }
    private async Task btnExportarExcel()
    {
        var itm = listRPT
      .Select(f => new
      {
          RPT = f.DESCRIPCION,
          Ejercicio = f.EJERCICIO,
          Fecha_Mesa_Parlamento = f.F_PLENO?.ToString("dd/MM/yyyy"),
          Fecha_Oficina = f.F_PARLAMENTO?.ToString("dd/MM/yyyy"),
          Fecha_Inicio = f.FECHAINICIO?.ToString("dd/MM/yyyy"),
          Fecha_Fin = f.FECHAFIN?.ToString("dd/MM/yyyy"),
          Situación = f.IDSITUACIONNavigation?.DESCRIPCION

      })
      .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,
           $"RPT.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>