using System;
using System.Collections.Generic;

namespace foundation_system.Models.ViewModels.Reportes
{
    // 1. Movimientos de Caja Chica
    public class ReporteMovimientosViewModel
    {
        public DateOnly FechaInicio { get; set; }
        public DateOnly FechaFin { get; set; }
        public List<MovimientoDetalleItem> Movimientos { get; set; } = new();
        public decimal TotalIngresos { get; set; }
        public decimal TotalEgresos { get; set; }
        public decimal SaldoPeriodo => TotalIngresos - TotalEgresos;
        public string GeneradoPor { get; set; } = string.Empty;
        public DateTime FechaGeneracion { get; set; }
    }

    public class MovimientoDetalleItem
    {
        public long Id { get; set; }
        public DateOnly Fecha { get; set; }
        public string Tipo { get; set; } = string.Empty; // INGRESO/EGRESO
        public string Concepto { get; set; } = string.Empty;
        public string Categoria { get; set; } = string.Empty;
        public decimal Monto { get; set; }
        public string Usuario { get; set; } = string.Empty;
    }

    // 2. Histórico de Saldos
    public class ReporteHistoricoSaldosViewModel
    {
        public DateOnly FechaInicio { get; set; }
        public DateOnly FechaFin { get; set; }
        public List<SaldoDiarioItem> Saldos { get; set; } = new();
        public string GeneradoPor { get; set; } = string.Empty;
        public DateTime FechaGeneracion { get; set; }
    }

    public class SaldoDiarioItem
    {
        public DateOnly Fecha { get; set; }
        public decimal SaldoInicial { get; set; }
        public decimal Ingresos { get; set; }
        public decimal Egresos { get; set; }
        public decimal SaldoFinal { get; set; }
    }

    // 3. Gastos por Categoría
    public class ReporteGastosCategoriaViewModel
    {
        public DateOnly FechaInicio { get; set; }
        public DateOnly FechaFin { get; set; }
        public List<GastoCategoriaItem> Categorias { get; set; } = new();
        public decimal TotalGastos { get; set; }
        public string GeneradoPor { get; set; } = string.Empty;
        public DateTime FechaGeneracion { get; set; }
    }

    public class GastoCategoriaItem
    {
        public string Categoria { get; set; } = string.Empty;
        public int CantidadTransacciones { get; set; }
        public decimal MontoTotal { get; set; }
        public decimal Porcentaje { get; set; }
    }

    // 4. Reposiciones
    public class ReporteReposicionesViewModel
    {
        public DateOnly FechaInicio { get; set; }
        public DateOnly FechaFin { get; set; }
        public List<ReposicionItem> Reposiciones { get; set; } = new();
        public decimal TotalRepuesto { get; set; }
        public string GeneradoPor { get; set; } = string.Empty;
        public DateTime FechaGeneracion { get; set; }
    }

    public class ReposicionItem
    {
        public DateOnly Fecha { get; set; }
        public decimal Monto { get; set; }
        public string Usuario { get; set; } = string.Empty;
        public string Descripcion { get; set; } = string.Empty;
    }
}
