@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

@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" onclick="btnExportarExcel">Exportar Excel</button>
        <button class="btnOAAFAzul" onclick="btnExportarPDF">Exportar PDF</button>
    </div>
    <Button @onclick="@(() => abrirPopupGestionDatos(new VEHICULOS()))" class="btnOAAFAzul d-flex align-items-center"> <i class="icono-nuevo"></i> Nuevo </Button>
</div>

<!-- Grid de BlazorBootstrap -->
<Grid TItem="VEHICULOS"
      Class="table tablaRegPers"
      Data="vehiculosItems"
      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="VEHICULOS" HeaderText="Matrícula" PropertyName="DNI">
            @context.MATRICULA
        </GridColumn>
        <GridColumn TItem="VEHICULOS" HeaderText="Color" PropertyName="Nombre">
            @context.COLOR
        </GridColumn>
        <GridColumn TItem="VEHICULOS" HeaderText="Marca/Modelo" PropertyName="Apellidos">
            @context.MARCAMODELO
        </GridColumn>
        <GridColumn TItem="VEHICULOS" HeaderText="">
            <span @onclick="@(() => abrirPopupGestionDatos(@context))" style="cursor: pointer;">
                <Icon CustomIconName="fas fa-edit"></Icon>
            </span>
            <span @onclick="@(() => abrirPopupConfirmarBorrado(@context))" style="cursor: pointer;">
                <Icon CustomIconName="fas fa-trash"></Icon>
            </span>
        </GridColumn>
    </GridColumns>
</Grid>

<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
    <BodyTemplate>
        <div class="row">
            <div class="col-12 formatoCampos">
                <label class="tituloLbl">Matrícula:</label>
                <InputText required @bind-Value="itemSeleccionado.MATRICULA" class="inputForm" maxlength="12"></InputText>
            </div>
            <div class="col-12 formatoCampos">
                <label class="tituloLbl">Color:</label>
                <InputText required @bind-Value="itemSeleccionado.COLOR" class="inputForm"></InputText>
            </div>
            <div class="col-12 formatoCampos">
                <label class="tituloLbl">Marca/Modelo:</label>
                <InputText required @bind-Value="itemSeleccionado.MARCAMODELO" class="inputForm" maxlength="60"></InputText>
            </div>
        </div>
    </BodyTemplate>
    <FooterTemplate>
        <Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
        @if (itemSeleccionado.IDVEHICULO != 0)
        {
            <Button @onclick="@(() => GestionarDatos("update"))" Color="ButtonColor.Primary">Modificar</Button>
        }
        else
        {
            <Button @onclick="@(() => GestionarDatos("create"))" Color="ButtonColor.Primary">Añadir</Button>
        }
    </FooterTemplate>
</Modal>

<Modal @ref="popupConfirmarBorrado" title="" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
    <BodyTemplate>
        <div class="col-12 formatoCampos">
            ¿Estás seguro que desea eliminarlo?
        </div>

    </BodyTemplate>
    <FooterTemplate>
        <Button Color="ButtonColor.Secondary" @onclick="cerrarPopupConfirmarBorrado">Cerrar</Button>
        <Button @onclick="@(() => BorrarItem())" Color="ButtonColor.Danger">Eliminar</Button>
    </FooterTemplate>
</Modal>


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

    private List<VEHICULOS> vehiculosItems = new();
    private HttpClient cliente = new HttpClient();

    private Modal popupGestionDatos = default!;
    private Modal popupConfirmarBorrado = default!;
    private string tituloPopup = "";

    private VEHICULOS itemSeleccionado = new VEHICULOS();
    private int idItem = 0;
    List<ToastMessage> mensajes = new List<ToastMessage>();


    protected override async Task OnInitializedAsync()
    {
        if (Persona?.IDPERSONA != null && Persona.IDPERSONA > 0)
        {
            await CargarVehiculo();
        }
        else
        {
            Console.WriteLine("Persona no está completamente cargada.");
        }
    }
    private async Task CargarVehiculo()
    {
        cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
        await ObtenerLista();
    }
    private async Task ObtenerLista()
    {
        Expression<Func<VEHICULOS, bool>> filtro = x => x.IDPERSONA == Persona.IDPERSONA;
        vehiculosItems = await Utilidades.ObtenerObjeto<List<VEHICULOS>>(cliente, "/api/VEHICULOS/filtrar", filtro);
    }
    private async Task abrirPopupGestionDatos(VEHICULOS objeto)
    {
        itemSeleccionado = objeto;

        if (idItem != 0)
        {
            tituloPopup = "Modificar Vehículo";
        }
        else
        {
            tituloPopup = "Nuevo Vehículo";
        }
        await popupGestionDatos.ShowAsync();
    }
    private async Task cerrarPopupGestionDatos()
    {
        await popupGestionDatos.HideAsync();
    }
    private async Task GestionarDatos(string accion)
    {
        itemSeleccionado.IDPERSONA = Persona.IDPERSONA;
        switch (accion)
        {
            case "update":
                var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/VEHICULOS/" + itemSeleccionado.IDVEHICULO, itemSeleccionado);
                await cerrarPopupGestionDatos();

                mensajes.Add(new ToastMessage
                    {
                        Type = ToastType.Primary,
                        Message = $"Actualizado correctamente.",
                    });

                break;

            case "create":
                var response = await Utilidades.NuevoObjeto(cliente, "/api/VEHICULOS", itemSeleccionado);
                await cerrarPopupGestionDatos();
                mensajes.Add(new ToastMessage
                    {
                        Type = ToastType.Primary,
                        Message = $"Guardado correctamente.",
                    });
                break;

            case "delete":
                var responsed = await cliente.DeleteAsync("/api/VEHICULOS/" + itemSeleccionado.IDVEHICULO);
                await cerrarPopupConfirmarBorrado();
                mensajes.Add(new ToastMessage
                    {
                        Type = ToastType.Primary,
                        Message = $"Eliminado correctamente.",
                    });
                break;
        }
        await ObtenerLista();
        await InvokeAsync(StateHasChanged);
    }
    private async Task BorrarItem()
    {
        await GestionarDatos("delete");
    }
    private async Task abrirPopupConfirmarBorrado(VEHICULOS objeto)
    {
        itemSeleccionado = objeto;
        await popupConfirmarBorrado.ShowAsync();
    }
    private async Task cerrarPopupConfirmarBorrado()
    {
        await popupConfirmarBorrado.HideAsync();
    }
    private async Task btnExportarPDF()
    {
        var itm = vehiculosItems
      .Select(f => new
      {
          Matrícula = f.MATRICULA,
          Color = f.COLOR,
          Modelo = f.MARCAMODELO,

      })
      .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,
            $"Vehiculos_{Persona.APELLIDOS}_{Persona.NOMBRE}.pdf");
        // await Utilidades.ExportarPDFEnBrowser(JS, itm, $"Vehiculos_{Persona.APELLIDOS}_{Persona.NOMBRE}.pdf");
    }
    private async Task btnExportarExcel()
    {
        var itm = vehiculosItems
     .Select(f => new
     {
         Matrícula = f.MATRICULA,
         Color = f.COLOR,
         Modelo = f.MARCAMODELO,

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