using System.ComponentModel.DataAnnotations;

namespace foundation_system.Models.ViewModels;

public class ExpedienteViewModel
{
    public long? Id { get; set; } // Nino Id

    // Persona Data
    [Required(ErrorMessage = "Los nombres son requeridos")]
    [Display(Name = "Nombres")]
    public string Nombres { get; set; } = string.Empty;

    [Required(ErrorMessage = "Los apellidos son requeridos")]
    [Display(Name = "Apellidos")]
    public string Apellidos { get; set; } = string.Empty;

    [Display(Name = "DUI")]
    [StringLength(12)]
    public string? Dui { get; set; }

    [Display(Name = "NIT")]
    [StringLength(17)]
    public string? Nit { get; set; }

    [Required(ErrorMessage = "La fecha de nacimiento es requerida")]
    [Display(Name = "Fecha de Nacimiento")]
    [DataType(DataType.Date)]
    public DateOnly? FechaNacimiento { get; set; }

    [Required(ErrorMessage = "El género es requerido")]
    [Display(Name = "Género")]
    public string? Genero { get; set; }

    [EmailAddress(ErrorMessage = "Correo electrónico inválido")]
    public string? Email { get; set; }

    [Display(Name = "Teléfono")]
    public string? Telefono { get; set; }

    [Display(Name = "Foto")]
    public string? FotoUrl { get; set; }

    [Display(Name = "Archivo de Foto")]
    public IFormFile? FotoFile { get; set; }

    [Required(ErrorMessage = "La dirección es requerida")]
    [Display(Name = "Dirección")]
    public string? Direccion { get; set; }

    // Nino Data
    [Display(Name = "Código de Inscripción")]
    public string? CodigoInscripcion { get; set; }

    [Required(ErrorMessage = "La fecha de inscripción es requerida")]
    [Display(Name = "Fecha de Inscripción")]
    [DataType(DataType.Date)]
    public DateOnly FechaInscripcion { get; set; } = DateOnly.FromDateTime(DateTime.Now);

    [Required(ErrorMessage = "El estado es requerido")]
    [Display(Name = "Estado")]
    public string Estado { get; set; } = "ACTIVO";

    [Required(ErrorMessage = "El nivel/grado es requerido")]
    [Display(Name = "Nivel/Grado")]
    public string? NivelGrado { get; set; }

    [Display(Name = "Alergias")]
    public string? Alergias { get; set; }

    [Display(Name = "Contacto de Emergencia")]
    public string? ContactoEmergenciaNombre { get; set; }

    [Display(Name = "Teléfono de Emergencia")]
    public string? ContactoEmergenciaTelefono { get; set; }

    // Parents
    [Required(ErrorMessage = "El padre es requerido")]
    public long? PadreId { get; set; }
    public string? PadreNombre { get; set; }
    
    [Required(ErrorMessage = "La madre es requerida")]
    public long? MadreId { get; set; }
    public string? MadreNombre { get; set; }

    [Required(ErrorMessage = "El encargado es requerido")]
    public long? EncargadoId { get; set; }
    public string? EncargadoNombre { get; set; }
}
