using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace foundation_system.Models
{
    [Table("caja_chica_movimientos")]
    public class CajaChicaMovimiento
    {
        [Key]
        [Column("id")]
        public long Id { get; set; }

        [Column("caja_chica_id")]
        public int CajaChicaId { get; set; }
        
        [ForeignKey("CajaChicaId")]
        public virtual CajaChica? CajaChica { get; set; }

        [Required]
        [StringLength(20)]
        [Column("tipo_movimiento")]
        public string TipoMovimiento { get; set; } = string.Empty; // GASTO, APERTURA, REPOSICION, etc.

        [Column("fecha_movimiento")]
        public DateOnly FechaMovimiento { get; set; }

        [Column("monto", TypeName = "decimal(10,2)")]
        public decimal Monto { get; set; }

        [Required]
        [Column("descripcion")]
        public string Descripcion { get; set; } = string.Empty;

        [Column("categoria_gasto_id")]
        public int? CategoriaGastoId { get; set; }
        
        [ForeignKey("CategoriaGastoId")]
        public virtual CategoriaGasto? CategoriaGasto { get; set; }

        [Column("proveedor_id")]
        public int? ProveedorId { get; set; }
        
        [ForeignKey("ProveedorId")]
        public virtual Proveedor? Proveedor { get; set; }

        [Column("usuario_registro_id")]
        public long UsuarioRegistroId { get; set; }
        
        [ForeignKey("UsuarioRegistroId")]
        public virtual Usuario? UsuarioRegistro { get; set; }

        [Column("estado_reembolso")]
        [StringLength(20)]
        public string EstadoReembolso { get; set; } = "PENDIENTE"; // PENDIENTE, REEMBOLSADO, ANULADO
        
        [Column("creado_en")]
        public DateTime CreadoEn { get; set; } = DateTime.UtcNow;

        public virtual ICollection<DocumentoSoporte> Documentos { get; set; } = new List<DocumentoSoporte>();
    }
}
