using System.Collections.Generic;
using System.Threading.Tasks;
using isn.Abstract;
using isnd.Controllers;
using isnd.Data;
using isnd.Data.Catalog;
using isnd.Data.Packages;
using isnd.Data.Packages.Catalog;
using isnd.Services;
using isnd.ViewModels;
using NuGet.Versioning;
using Unleash;

namespace isnd.Interfaces
{
    public interface IPackageManager
    {
        string CatalogBaseUrl { get; }
        AutoCompleteResult AutoComplete(string pkgid, int skip, int take, bool prerelease = false, string packageType = null);
       
        string[] GetVersions(string pkgid, NuGetVersion parsedVersion, bool prerelease = false, string packageType = null, int skip = 0, int take = 25);
        IEnumerable<Resource> GetResources(IUnleash unleashĈlient);
        Task<RegistrationPageIndex> ÛpdateCatalogForAsync(Commit commit);
        Task<PackageDeletionReport> DeletePackageAsync(string pkgid, string version, string type);
        Task<PackageDeletionReport> UserAskForPackageDeletionAsync(string userid, string pkgId, string lower, string type);
        Task<PackageVersion> GetPackageAsync(string pkgid, string version, string type);
        Task<CatalogEntry> GetCatalogEntryAsync(string pkgId, string version, string pkgType);
        IEnumerable<CatalogEntry> SearchCatalogEntriesById(string pkgId, string semver, string pkgType);

        Task<RegistrationPageIndex> GetCatalogIndexAsync();
        Task<RegistrationPageIndex> GetPackageRegistrationIndexAsync(RegistrationPageIndexQuery query);

        Task<RegistrationPageIndex> SearchPackageAsync(RegistrationPageIndexQuery query);
    }

}