using System;
using System.Collections.Generic;
using System.Linq;

namespace GestionIntegral.Api.Dtos.Reportes.ViewModels
{
    public class ListadoDistribucionCanillasViewModel
    {
        public IEnumerable<ListadoDistribucionCanillasSimpleDto> DetalleDiario { get; set; } = new List<ListadoDistribucionCanillasSimpleDto>();
        public IEnumerable<ListadoDistribucionCanillasPromedioDiaDto> PromediosPorDia { get; set; } = new List<ListadoDistribucionCanillasPromedioDiaDto>();

        public string NombrePublicacion { get; set; } = string.Empty;
        public string FechaDesde { get; set; } = string.Empty;
        public string FechaHasta { get; set; } = string.Empty;
        public string FechaReporte { get; set; } = DateTime.Now.ToString("dd/MM/yyyy");
        
        public ListadoDistribucionCanillasSimpleDto TotalesDetalleDiario
        {
            get
            {
                if (DetalleDiario == null || !DetalleDiario.Any())
                {
                    return new ListadoDistribucionCanillasSimpleDto();
                }
                return new ListadoDistribucionCanillasSimpleDto
                {
                    Llevados = DetalleDiario.Sum(d => d.Llevados),
                    Devueltos = DetalleDiario.Sum(d => d.Devueltos)
                };
            }
        }
        
        // --- PROPIEDAD PARA LA FILA "GENERAL" ---
        public ListadoDistribucionCanillasPromedioDiaDto? PromedioGeneral
        {
            get
            {
                if (PromediosPorDia == null || !PromediosPorDia.Any()) return null;

                // Sumamos los totales, no promediamos los promedios
                var totalLlevados = PromediosPorDia.Sum(p => p.Llevados);
                var totalDevueltos = PromediosPorDia.Sum(p => p.Devueltos);
                var totalDias = PromediosPorDia.Sum(p => p.Cant);

                if (totalDias == 0) return null;

                return new ListadoDistribucionCanillasPromedioDiaDto
                {
                    Dia = "General",
                    Cant = totalDias,
                    Promedio_Llevados = totalLlevados / totalDias,
                    Promedio_Devueltos = totalDevueltos / totalDias,
                    Promedio_Ventas = (totalLlevados - totalDevueltos) / totalDias
                };
            }
        }
    }
}