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

namespace Controladora
{
    public class ControladoraRemito : Singleton<ControladoraRemito>
    {
        public ReadOnlyCollection<Remito> Listar()
        {
            return RepositorioRemito.Instance.Listar();
        }

        public string Añadir(Remito t, OrdenDeCompra orden )
        {
            if (t == null) return "El Remito es nulo fallo la carga";
            if (t.Id < 0) return "El id Esta Mal Cargado";

            var retMarcarOrdenEntregada = RepositorioOrdenDeCompra.Instance.MarcarEntregado(orden);
            if (retMarcarOrdenEntregada == false) return "La orden Esta Mal Cargada";
            var retRemito = RepositorioRemito.Instance.Add(t);
            if (retRemito == false) return "El Remito Esta Mal Cargado";
            var retLotes = RepositorioLote.Instance.Add(t);

            return (retLotes) ? 
                $"El remito {t.Id} se cargo correctamente":
                $"Fallo la carga del remito {t.Id}"; 

        }
        public string Modificar(Remito t)
        {
            return "No se puede modificar un Remito";
        }

        private string Eliminar(Remito t)
        {
            return "No se puede Eliminar un remito";
            /*
            if (t == null) return "El Remito es nulo fallo la carga";

            return (RepositorioRemito.Instance.Del(t)) ? 
                $"El remito {t.Id} se elimino correctamente":
                $"Fallo la Eliminacion del remito {t.Id}"; 
            */
        }

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

        public ReadOnlyCollection<OrdenDeCompra> ListarOrdenesSinEntregar()
        {
            return RepositorioOrdenDeCompra.Instance.Listar()
                .Where(x => x.Entregado == false)
                .ToList()
                .AsReadOnly();
        }
        public ReadOnlyCollection<DetalleOrdenDeCompra> ListarDetallesOrdenesDeCompra(OrdenDeCompra orden)
        {
            var ordenalistar = RepositorioOrdenDeCompra.Instance.Listar().First(x => x.Id == orden.Id);
            if (ordenalistar == null) return new ReadOnlyCollection<DetalleOrdenDeCompra>(new List<DetalleOrdenDeCompra>());
            return ordenalistar.MostrarDetalles();

        }

        public OrdenDeCompra? MostrarOrdenDeCompraPorId(OrdenDeCompra ordenDeCompra)
        {
            if (ordenDeCompra == null) return null;
            if (ordenDeCompra.Id < 0) return null;
            return RepositorioOrdenDeCompra.Instance.Listar().First(x => x.Id == ordenDeCompra.Id);
        }

        public ReadOnlyCollection<Lote> ListarLotesPorRemito(Remito rem)
        {
            var remalistar = RepositorioRemito.Instance.Listar().First(x => x.Id == rem.Id);
            if (remalistar == null) return new ReadOnlyCollection<Lote>(new List<Lote>());
            return remalistar.MostrarLotes();

        }
    }    
}
    