namespace GmRelay.Web.Services.Portfolio;

public interface IPortfolioStore
{
    Task<IReadOnlyList<PublicPortfolioCard>> GetPublicPortfolioGamesForMasterAsync(string masterSlug);

    Task<IReadOnlyList<PublicPortfolioCard>> GetPublicPortfolioGamesForClubAsync(string clubSlug);

    Task<PublicPortfolioGame?> GetPublicPortfolioGameBySlugAsync(string slug);

    Task<IReadOnlyList<PortfolioGameSummary>> GetPortfolioGamesForGroupAsync(Guid groupId);

    Task<Guid?> GetPortfolioGameGroupIdAsync(Guid portfolioGameId);

    Task<PortfolioGameEditor?> GetPortfolioGameForManagementAsync(Guid portfolioGameId);

    Task<IReadOnlyList<PortfolioSessionOption>> GetEligibleCompletedSessionsAsync(Guid groupId, Guid? portfolioGameId);

    Task<IReadOnlyList<PortfolioMasterOption>> GetPortfolioMasterOptionsAsync(Guid groupId, Guid? portfolioGameId);

    Task<Guid> CreatePortfolioDraftAsync(Guid groupId, Guid? preselectedSessionId);

    Task UpdatePortfolioDraftAsync(Guid portfolioGameId, Guid groupId, PortfolioGameUpdate update);

    Task<string?> SetPortfolioCoverAsync(Guid portfolioGameId, Guid groupId, string storageKey);

    Task<string?> DeletePortfolioGameAsync(Guid portfolioGameId, Guid groupId);

    Task SetPortfolioPublicationAsync(Guid portfolioGameId, Guid groupId, bool isPublic);

    Task ModeratePortfolioReviewAsync(Guid reviewId, Guid portfolioGameId, Guid groupId, Guid moderatorPlayerId, string moderationStatus);

    Task<PortfolioReviewSubmissionState> GetReviewSubmissionStateAsync(string slug, string platform, string externalUserId);

    Task SubmitPortfolioReviewAsync(string slug, string platform, string externalUserId, string displayName, string body);
}
