using System.Collections.ObjectModel;
using Entidades;
using Modelo;

namespace Controladora
{
    public class ControladoraPresupuestos : Singleton<ControladoraPresupuestos>
    {
        public string Añadir(Presupuesto t)
        {
            if (t == null) return "El Presupuesto es nulo fallo la carga";

            return (RepositorioPresupuesto.Instance.Add(t)) ? 
                $"El Presupuesto {t.Id} se cargo correctamente":
                $"Fallo la carga del Presupuesto {t.Id}"; 
        }

        public string Eliminar(Presupuesto t)
        {
           if (t == null) return "El Presupuesto es nulo fallo la carga";

            return (RepositorioPresupuesto.Instance.Del(t)) ? 
                $"El Presupuesto {t.Id} se Elimino correctamente":
                $"Fallo la Eliminacion del Presupuesto {t.Id}";         
        }

        public string Modificar(Presupuesto t)
        {
            if (t == null) return "El Presupuesto es nulo fallo la carga";

            return (RepositorioPresupuesto.Instance.Mod(t)) ? 
                $"El Presupuesto {t.Id} se Modifico correctamente":
                $"Fallo la Modificacion del Presupuesto {t.Id}";    
        }
        public string AceptarPresupuesto(Presupuesto t)
        {
            if (t == null) return "El Presupuesto es nulo fallo la carga";
            if (t.Aceptado == true) return "El presupuesto ya fue aceptado";

            return (RepositorioPresupuesto.Instance.AceptarPresupuesto(t)) ? 
                $"El Presupuesto {t.Id} se Acepto correctamente":
                $"Fallo la aceptacion del Presupuesto {t.Id}";    
        }
        public ReadOnlyCollection<Presupuesto> Listar()
        {
            return RepositorioPresupuesto.Instance.Listar()
                .Where(x => x.Habilitado == true)
                .ToList()
                .AsReadOnly();
        }

        public ReadOnlyCollection<DetallePresupuesto> ListarDetalles(Presupuesto presupuesto)
        {
            Presupuesto pres = RepositorioPresupuesto.Instance.Listar().First(x=> x.Id == presupuesto.Id);
            if (pres == null) return new ReadOnlyCollection<DetallePresupuesto>(new List<DetallePresupuesto>());
            return pres.MostrarDetalles();

        }

        public object ListarProductosPorProveedor(Proveedor proveedor)
        {
            if (proveedor == null) return new List<Producto>().AsReadOnly();
            if (proveedor.Cuit < 0) return new List<Producto>().AsReadOnly();
            var productos = RepositorioProductos.Instance
                .Listar()
                .Where(x => x.ListarProveedores()
                            .Any(x => x.Cuit == proveedor.Cuit))
                .ToList()
                .AsReadOnly();

            return productos;
        }

        public object ListarProveedores()
        {
            return RepositorioProveedor.Instance.Listar()
                .Where(x => x.Habilitado == true)
                .ToList()
                .AsReadOnly();
        }

        public ReadOnlyCollection<Presupuesto> ListarTodo()
        {
            return RepositorioPresupuesto.Instance.Listar();
        }
    }
}

