using Tiku.Application.Catalog;

namespace Tiku.Application.Content;

public interface IContentManagementService
{
    Task<CatalogList<ContentEntryManagementItem>> GetEntriesAsync(
        ContentManagementActor actor,
        ContentManagementFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<ContentEntryManagementItem>> UpsertEntryAsync(
        ContentManagementActor actor,
        UpsertContentEntryCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<ContentNodeManagementItem>> GetNodesAsync(
        ContentManagementActor actor,
        ContentManagementFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<ContentNodeManagementItem>> UpsertNodeAsync(
        ContentManagementActor actor,
        UpsertContentNodeCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<QuestionCollectionManagementItem>> GetCollectionsAsync(
        ContentManagementActor actor,
        ContentManagementFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<QuestionCollectionManagementItem>> UpsertCollectionAsync(
        ContentManagementActor actor,
        UpsertQuestionCollectionCommand command,
        CancellationToken cancellationToken = default);

    Task<CollectionItemsReplaceResult> ReplaceCollectionItemsAsync(
        ContentManagementActor actor,
        ReplaceCollectionItemsCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<PracticeBlueprintManagementItem>> GetPracticeBlueprintsAsync(
        ContentManagementActor actor,
        ContentManagementFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<PracticeBlueprintManagementItem>> UpsertPracticeBlueprintAsync(
        ContentManagementActor actor,
        UpsertPracticeBlueprintCommand command,
        CancellationToken cancellationToken = default);

    ImportFieldMappingItem GetImportFieldMapping(string importType);

    ImportTemplateItem GetImportTemplate(string importType, string? format);
}
