@page "/Rechazados"
@rendermode InteractiveServer
@using GestionaDenunciasAN.Models
@using System.Globalization
@attribute [StreamRendering]
@inject GestionaDenunciasAN.Models.UserState userState
@inject NavigationManager Navigation

<PageTitle>Denuncias Rechazadas</PageTitle>

<style>
    /* Contenedor para la lista de denuncias */
    .rechazados-list {
        margin-top: 20px;
    }
    /* Estilo general para cada card */
    .collapse-card {
        margin-bottom: 1rem;
        border: 1px solid #ccc;
        border-radius: 6px;
        box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        overflow: hidden;
        transition: transform 0.3s ease, box-shadow 0.3s ease;
    }

        .collapse-card:hover {
            transform: scale(1.02);
            box-shadow: 0 4px 8px rgba(0,0,0,0.2);
        }
    /* Aplicar fondo rojo a toda la card */
    .Rechazada {
        background-color: #f8d7da;
        color: #721c24;
    }
        /* Forzar fondo transparente en cabecera y cuerpo para que hereden el color de la card */
        .Rechazada .card-header,
        .Rechazada .card-body {
            background-color: transparent;
        }
    /* Estilos para la cabecera de la card */
    .card-header {
        padding: 0.75rem 1.25rem;
        cursor: pointer;
    }

        .card-header h5 {
            margin: 0;
            font-size: 1.1rem;
        }

    .header-info {
        font-size: 0.9rem;
        margin-top: 0.5rem;
    }

        .header-info span {
            margin-right: 15px;
        }
    /* Estilos para el cuerpo de la card */
    .card-body {
        padding: 1.25rem;
    }
    /* Estilos para los títulos de sección dentro de la card */
    .section-heading {
        text-align: center;
        font-weight: bold;
        text-decoration: underline;
        font-size: 1.1em;
        margin-top: 1rem;
        margin-bottom: 0.5rem;
    }
</style>

<h1>Denuncias Rechazadas</h1>

<!-- Campo de búsqueda -->
<input type="text"
       class="form-control"
       placeholder="Buscar denuncias..."
       @bind="busqueda"
       @bind:event="oninput"
       style="margin-bottom:20px;" />

@if (!hasLoaded)
{
    <div class="alert alert-info">Cargando datos...</div>
}
else if (denunciasRechazadas == null || !denunciasRechazadas.Any())
{
    <p>No hay denuncias rechazadas.</p>
}
else
{
    <div class="rechazados-list">
        @foreach (var denuncia in denunciasRechazadas.Where(d =>
       string.IsNullOrWhiteSpace(busqueda) ||
       d.Id_Denuncia.ToString().Contains(busqueda) ||
       (!string.IsNullOrEmpty(d.NombreDenuncia) && d.NombreDenuncia.Contains(busqueda, StringComparison.OrdinalIgnoreCase)) ||
       (!string.IsNullOrEmpty(d.Estado) && d.Estado.Contains(busqueda, StringComparison.OrdinalIgnoreCase))
       ))
        {
            var collapseId = $"collapse{denuncia.Id_Denuncia}";
            <div class="card collapse-card Rechazada">
                <div class="card-header" data-bs-toggle="collapse" data-bs-target="#@collapseId" aria-expanded="false" aria-controls="@collapseId">
                    <h5 class="mb-0">Denuncia ID: @denuncia.Id_Denuncia</h5>
                    <div class="header-info">
                        <span><strong>Estado:</strong> @denuncia.Estado</span>
                        <span><strong>Motivo de rechazo:</strong> @denuncia.NombreDenuncia</span>
                        <span><strong>Fecha Rechazada:</strong> @denuncia.FechaSubidaAGestiona.ToString("dd/MM/yyyy")</span>
                        <span><strong>Hora Rechazada:</strong> @denuncia.FechaSubidaAGestiona.ToString("HH:mm")</span>
                    </div>
                </div>
                <div id="@collapseId" class="collapse">
                    <div class="card-body">
                        <!-- Datos Generales -->
                        <h5 class="section-heading">Datos Generales</h5>
                        <dl class="row">
                            @if (denuncia.Id_RegistroDenuncia != 0)
                            {
                                <dt class="col-sm-3">ID Registro Denuncia</dt>
                                <dd class="col-sm-9">@denuncia.Id_RegistroDenuncia</dd>
                            }
                            @if (denuncia.Id_Denuncia != 0)
                            {
                                <dt class="col-sm-3">ID Denuncia</dt>
                                <dd class="col-sm-9">@denuncia.Id_Denuncia</dd>
                            }
                            @if (denuncia.Fecha != DateTime.MinValue)
                            {
                                <dt class="col-sm-3">Fecha</dt>
                                <dd class="col-sm-9">@denuncia.Fecha.ToString("dd/MM/yyyy HH:mm")</dd>
                            }
                            @if (!string.IsNullOrWhiteSpace(denuncia.Expediente_Gestiona))
                            {
                                <dt class="col-sm-3">Expediente Gestión</dt>
                                <dd class="col-sm-9">@denuncia.Expediente_Gestiona</dd>
                            }
                            @if (denuncia.Id_Persona_Gestiona != 0)
                            {
                                <dt class="col-sm-3">ID Persona Gestión</dt>
                                <dd class="col-sm-9">@denuncia.Id_Persona_Gestiona</dd>
                            }
                            @if (!string.IsNullOrWhiteSpace(denuncia.Etiqueta))
                            {
                                <dt class="col-sm-3">Etiqueta</dt>
                                <dd class="col-sm-9">@denuncia.Etiqueta</dd>
                            }
                        </dl>

                        <!-- Datos del Denunciante -->
                        @if (!string.IsNullOrWhiteSpace(denuncia.Nombre) ||
                       !string.IsNullOrWhiteSpace(denuncia.Apellidos) ||
                       !string.IsNullOrWhiteSpace(denuncia.Sexo) ||
                       !string.IsNullOrWhiteSpace(denuncia.Dni))
                        {
                            <h5 class="section-heading">Datos del Denunciante</h5>
                            <dl class="row">
                                @if (!string.IsNullOrWhiteSpace(denuncia.Nombre))
                                {
                                    <dt class="col-sm-3">Nombre</dt>
                                    <dd class="col-sm-9">@denuncia.Nombre</dd>
                                }
                                @if (!string.IsNullOrWhiteSpace(denuncia.Apellidos))
                                {
                                    <dt class="col-sm-3">Apellidos</dt>
                                    <dd class="col-sm-9">@denuncia.Apellidos</dd>
                                }
                                @if (!string.IsNullOrWhiteSpace(denuncia.Sexo))
                                {
                                    <dt class="col-sm-3">Sexo</dt>
                                    <dd class="col-sm-9">@denuncia.Sexo</dd>
                                }
                                @if (!string.IsNullOrWhiteSpace(denuncia.Dni))
                                {
                                    <dt class="col-sm-3">DNI</dt>
                                    <dd class="col-sm-9">@denuncia.Dni</dd>
                                }
                            </dl>
                        }

                        <!-- Detalles de la Denuncia -->
                        <h5 class="section-heading">Detalles de la Denuncia</h5>
                        <dl class="row">
                            <dt class="col-sm-3">Asunto</dt>
                            <dd class="col-sm-9">@denuncia.Asunto</dd>
                            <dt class="col-sm-3">A Quien Denuncia</dt>
                            <dd class="col-sm-9">@denuncia.A_Quien_Denuncia</dd>
                            <dt class="col-sm-3">Descripción Denuncia</dt>
                            <dd class="col-sm-9">@denuncia.Descripcion_Denuncia</dd>
                            <dt class="col-sm-3">Denunciado Ante Inst</dt>
                            <dd class="col-sm-9">@denuncia.Denunciado_Ante_Inst</dd>
                            @if (!string.IsNullOrWhiteSpace(denuncia.Modalidad_Informacion))
                            {
                                <dt class="col-sm-3">Modalidad Información</dt>
                                <dd class="col-sm-9">@denuncia.Modalidad_Informacion</dd>
                            }
                            <dt class="col-sm-3">Lugar Hechos</dt>
                            <dd class="col-sm-9">@denuncia.Lugar_Hechos</dd>
                            @if (denuncia.Fecha_Hechos != DateTime.MinValue)
                            {
                                <dt class="col-sm-3">Fecha Hechos</dt>
                                <dd class="col-sm-9">@denuncia.Fecha_Hechos.ToString("dd/MM/yyyy")</dd>
                            }
                        </dl>

                        <!-- Datos de Notificación -->
                        <h5 class="section-heading">Datos de Notificación</h5>
                        <dl class="row">
                            @if (!string.IsNullOrWhiteSpace(denuncia.Notificacion_Preferencia))
                            {
                                <dt class="col-sm-3">Notificación Preferencia</dt>
                                <dd class="col-sm-9">@denuncia.Notificacion_Preferencia</dd>
                            }
                            @if (!string.IsNullOrWhiteSpace(denuncia.Notificacion_Electronica))
                            {
                                <dt class="col-sm-3">Notificación Electrónica</dt>
                                <dd class="col-sm-9">@denuncia.Notificacion_Electronica</dd>
                            }
                            @if (!string.IsNullOrWhiteSpace(denuncia.Correo_Electronico))
                            {
                                <dt class="col-sm-3">Correo Electrónico</dt>
                                <dd class="col-sm-9">@denuncia.Correo_Electronico</dd>
                            }
                            @if (!string.IsNullOrWhiteSpace(denuncia.Notificacion_Sms))
                            {
                                <dt class="col-sm-3">Notificación SMS</dt>
                                <dd class="col-sm-9">@denuncia.Notificacion_Sms</dd>
                            }
                        </dl>

                        <!-- Otros -->
                        <h5 class="section-heading">Otros</h5>
                        <dl class="row">
                            @if (denuncia.Condiciones)
                            {
                                <dt class="col-sm-3">Condiciones</dt>
                                <dd class="col-sm-9">Sí</dd>
                            }
                            @if (!string.IsNullOrWhiteSpace(denuncia.Comments))
                            {
                                <dt class="col-sm-3">Comentarios</dt>
                                <dd class="col-sm-9"><pre>@denuncia.Comments</pre></dd>
                            }
                        </dl>

                        <!-- Ficheros adjuntos -->
                        @if (ficherosAdjuntos.ContainsKey(denuncia.Id_Denuncia) && ficherosAdjuntos[denuncia.Id_Denuncia].Any())
                        {
                            <h5 class="section-heading">Ficheros Adjuntos</h5>
                            <table class="table table-striped">
                                <thead>
                                    <tr>
                                        <th>Nombre</th>
                                        <th>Tamaño (bytes)</th>
                                        <th>Ver</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    @foreach (var fichero in ficherosAdjuntos[denuncia.Id_Denuncia])
                                    {
                                        <tr>
                                            <td>@fichero.NombreFichero</td>
                                            <td>@fichero.Fichero.Length</td>
                                            <td>
                                                <a class="btn btn-primary btn-sm" href="#"
                                                   onclick="openFile(event, '@Convert.ToBase64String(fichero.Fichero)', '@GetContentType(fichero.NombreFichero)');">
                                                    <i class="bi bi-eye"></i> Ver
                                                </a>
                                            </td>
                                        </tr>
                                    }
                                </tbody>
                            </table>
                        }
                    </div>
                </div>
            </div>
        }
    </div>
}

<script>
    function createObjectUrl(base64, contentType) {
        const binaryString = window.atob(base64);
        const len = binaryString.length;
        const bytes = new Uint8Array(len);
        for (let i = 0; i < len; i++) {
            bytes[i] = binaryString.charCodeAt(i);
        }
        const blob = new Blob([bytes], { type: contentType });
        return URL.createObjectURL(blob);
    }
    function openFile(event, base64, contentType) {
        event.preventDefault();
        event.stopPropagation();
        const objectUrl = createObjectUrl(base64, contentType);
        window.open(objectUrl, '_blank');
    }
</script>

@code {
    private List<DenunciasGestiona> denunciasRechazadas = new();
    private Dictionary<int, List<FicherosDenuncias>> ficherosAdjuntos = new();

    // Variable para la búsqueda
    private string busqueda = "";

    private const string DENUNCIAS_JSON = @"C:\ZipsDenuncias\denuncias.json";
    private const string FICHEROS_JSON = @"C:\ZipsDenuncias\ficheros.json";
    private bool isLoading = false;
    private bool hasLoaded = false;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            if (string.IsNullOrEmpty(userState.Token))
            {
                Navigation.NavigateTo("/", true);
                return;
            }
            isLoading = true;
            StateHasChanged();
            await CargarRechazadasAsync();
            await CargarFicherosAdjuntosAsync();
            isLoading = false;
            hasLoaded = true;
            StateHasChanged();
        }
    }

    private async Task CargarRechazadasAsync()
    {
        var todas = await CargarDenunciasJsonAsync();
        denunciasRechazadas = todas.Where(d => d.Expediente_Gestiona == "Rechazada").ToList();
    }

    private async Task<List<DenunciasGestiona>> CargarDenunciasJsonAsync()
    {
        if (File.Exists(DENUNCIAS_JSON))
        {
            var json = await File.ReadAllTextAsync(DENUNCIAS_JSON);
            var lista = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DenunciasGestiona>>(json);
            return lista ?? new List<DenunciasGestiona>();
        }
        return new List<DenunciasGestiona>();
    }

    private async Task<List<FicherosDenuncias>> CargarFicherosJsonAsync()
    {
        if (File.Exists(FICHEROS_JSON))
        {
            var json = await File.ReadAllTextAsync(FICHEROS_JSON);
            var lista = Newtonsoft.Json.JsonConvert.DeserializeObject<List<FicherosDenuncias>>(json);
            return lista ?? new List<FicherosDenuncias>();
        }
        return new List<FicherosDenuncias>();
    }

    private async Task CargarFicherosAdjuntosAsync()
    {
        var listaFicheros = await CargarFicherosJsonAsync();
        ficherosAdjuntos = listaFicheros.GroupBy(f => f.Id_Denuncia)
                                        .ToDictionary(g => g.Key, g => g.ToList());
    }

    private string GetContentType(string fileName)
    {
        var ext = Path.GetExtension(fileName).ToLowerInvariant();
        return ext switch
        {
            ".jpg" or ".jpeg" => "image/jpeg",
            ".png" => "image/png",
            ".gif" => "image/gif",
            ".pdf" => "application/pdf",
            ".txt" => "text/plain",
            _ => "application/octet-stream",
        };
    }
}
