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

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

            return (RepositorioProductos.Instance.Add(t)) ? 
                $"El Producto {t.Nombre} se cargo correctamente":
                $"Fallo la carga del Producto {t.Nombre}"; 
        }

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

            return (RepositorioProductos.Instance.Del(t)) ? 
                $"El Producto {t.Nombre} se Elimino correctamente":
                $"Fallo la Eliminacion del Producto {t.Nombre}";         
        }

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

            return (RepositorioProductos.Instance.Mod(t)) ? 
                $"El Producto {t.Nombre} se Modifico correctamente":
                $"Fallo la Modificacion del Producto {t.Nombre}";    
        }

        public ReadOnlyCollection<Producto> Listar()
        {
            return RepositorioProductos.Instance.Listar()
                .Where(x => x.Habilitado == true)
                .ToList()
                .AsReadOnly();
        }


        public ReadOnlyCollection<Proveedor> ListarProveedores(Producto producto)
        {
            Producto productoalistar = RepositorioProductos.Instance.Listar().First(x => x.Id == producto.Id);
            if (productoalistar == null) return new ReadOnlyCollection<Proveedor>(new List<Proveedor>());
            return productoalistar.ListarProveedores();

        }

        public Producto? MostrarPorId(Producto producto)
        {
            if (producto == null) return null;
            if (producto.Id < 0) return null;
            var lista = RepositorioProductos.Instance.Listar();
            if (lista.Any(x=> x.Id == producto.Id)){
                return lista.First(x => x.Id == producto.Id);
            }
            return null;
        }

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

        public ReadOnlyCollection<Categoria> ListarCategorias()
        {
            return RepositorioCategoria.Instance.Listar();
        }

        public int MostrarStock(Producto producto)
        {
            return ControladoraLotes.Instance.MostrarStockDeProducto(producto);
        }
    }
}