using System.Collections.Generic;
using System.Threading.Tasks;
using Knoks.Core.Entities;
using Knoks.Core.Entities.Args;

namespace Knoks.Core.Logic.Interfaces
{
    public interface IKnokManager
    {
        IDictionary<string, string> Settings { get; }
        Task<Knok> Process(CreateKnokArgs knok, decimal currentPrice);
        Task<bool> Validate(CreateKnokArgs knok);
        KnokRate KnokRatingCalc(CreateKnokArgs knok);
        Task<Knok> GetKnok(long knokId, long? contextUserId);
        Task<KnokFullData> GetKnokFull(long knokId, long userId);
        FileResponse GetFile(long knokId, string fileName);
        string GetImageUrl(long knokId, string fileName);
        Task<IEnumerable<KnokFeed>> GetPublicKnoks(KnokFeedArgs args);
        Task<IEnumerable<KnokOngoing>> GetAliveKnoks(KnokOngoingArgs args);
        Task<IEnumerable<KnokOngoing>> GetCurrentlyPublishedKnoks(KnokCurrentlyPublishedArgs args, long userId);
        Task<IEnumerable<KnokEnded>> GetPastPublishedKnoks(KnokPastPublishedArgs args, long userId);
        Task<KnokOwnData> GetOwnData(long userId);
        Task<float> GetKnokPrice(long userId);
        Task<Knok> PublishKnok(long knokId, User user, Account userAccount, decimal publishPrice, CreateKnokArgs args); //  decimal knokPrice, decimal knokRating);        
        Task PurchaseKnok(long knokId, User user, Account account);
        Task<KnokserProfile> GetKnokserProfile(long knokserId);
        Task<IEnumerable<KnokEnded>> GetEndedKnoks(KnokEndedArgs args);
    }
}
