using System.Collections.ObjectModel;
using Entidades;

namespace Modelo
{
    public sealed class RepositorioPresupuesto : RepositorioBase<Presupuesto, RepositorioPresupuesto>
    {
        override public bool Add(Presupuesto t)
        {
            bool ret = false;

            try
            {
                // Verifica si ya existe un presupuesto con el mismo ID
                if (!ExistePorId(t.Id))
                {
                    almacen.Add(t);
                    ret = true;
                }
            }
            catch (Exception ex)
            {
                // Maneja o registra la excepción
                Console.WriteLine($"Error al agregar presupuesto: {ex.Message}");
            }

            return ret;
        }

        override public bool Mod(Presupuesto t)
        {
            bool ret = false;

            try
            {
                var presupuestoAModificar = almacen.FindIndex(x => x.Id == t.Id);
                if (presupuestoAModificar > -1)
                {
                    almacen[presupuestoAModificar] = t;
                    ret = true;
                }
            }
            catch (Exception ex)
            {
                // Maneja o registra la excepción
                Console.WriteLine($"Error al modificar presupuesto: {ex.Message}");
            }

            return ret;
        }

        public bool ExistePorId(int id)
        {
            // Asegúrate de que `almacen` es la lista correcta
            return almacen.Any(p => p.Id == id);
        }

        public bool AceptarPresupuesto(Presupuesto t)
        {
            bool ret = false;
            try
            {
                var presupuestoAModificar = almacen.FindIndex(x => x.Id == t.Id);
                almacen[presupuestoAModificar].Aceptado = true;
                ret = true;
            }
            catch (Exception ex)
            {
                // Maneja o registra la excepción
                Console.WriteLine($"Error al modificar presupuesto: {ex.Message}");
            }
            return ret;
        }

        override public bool Del(Presupuesto t)
        {
            bool ret = false;

            try
            {
                var presupuestoAEliminar = almacen.Find(x => x.Id == t.Id);
                if (presupuestoAEliminar != null)
                {
                    presupuestoAEliminar.Habilitado = false;
                    ret = true;
                }
            }
            catch (Exception ex)
            {
                // Maneja o registra la excepción
                Console.WriteLine($"Error al eliminar presupuesto: {ex.Message}");
            }

            return ret;
        }

        public ReadOnlyCollection<DetallePresupuesto> MostrarDetalles(Presupuesto presupuesto)
        {
            return presupuesto.MostrarDetalles();
        }
    }
}