// Models/FicherosDenuncias.cs
using System;
using System.Text.Json.Serialization;

namespace GestionaDenuncias.Shared.Models
{
    public class FicherosDenuncias
    {
        // Id del fichero
        public int Id_Fichero { get; set; }

        // Id del tipo de fichero
        public int Id_Tipo { get; set; }

        // Descripción del fichero (puede ser nula)
        public string? Descripcion { get; set; }

        // Fecha de creación del fichero original
        public DateTime Fecha { get; set; }

        // Observaciones
        public string Observaciones { get; set; } = string.Empty;

        // Id de la denuncia al que está asociado (FK)
        public int Id_Denuncia { get; set; }

        // NombreCarpeta_NombreFichero
        public string NombreFichero { get; set; } = string.Empty;

        // Fichero completo en formato byte array (BLOB)
        public byte[] Fichero { get; set; } = [];

        // ? Nuevo: marca si ya se subió a Gestión
        public bool Subido { get; set; }

        // ? Nuevo: fecha en que se subió por última vez
        public DateTime? FechaSubida { get; set; }

        // Hash SHA-256 del contenido, para evitar re-subir adjuntos repetidos.
        public string ContentSha256 { get; set; } = string.Empty;

        [JsonIgnore]
        public DateOnly? KeyDate { get; set; }

        [JsonIgnore]
        public string EncryptionScheme { get; set; } = string.Empty;

        [JsonIgnore]
        public DateTime? EncryptedAtUtc { get; set; }

        public bool EsReport
        {
            get
            {
                var fileName = System.IO.Path.GetFileNameWithoutExtension(NombreFichero);
                var extension = System.IO.Path.GetExtension(NombreFichero);
                return fileName.StartsWith("report", StringComparison.OrdinalIgnoreCase) &&
                       (extension.Equals(".txt", StringComparison.OrdinalIgnoreCase) ||
                        extension.Equals(".pdf", StringComparison.OrdinalIgnoreCase));
            }
        }

        public FicherosDenuncias() { }

        public FicherosDenuncias(
            int id_Fichero,
            int id_Tipo,
            string? descripcion,
            DateTime fecha,
            string observaciones,
            int id_Denuncia,
            string nombreFichero,
            byte[] fichero
        )
        {
            Id_Fichero = id_Fichero;
            Id_Tipo = id_Tipo;
            Descripcion = descripcion;
            Fecha = fecha;
            Observaciones = observaciones;
            Id_Denuncia = id_Denuncia;
            NombreFichero = nombreFichero;
            Fichero = fichero;
            Subido = false;
            FechaSubida = null;
        }
    }
}
