using Tiku.Application.Catalog;
using Tiku.Application.Content;

namespace Tiku.Application.Assets;

public interface IAssetManagementService
{
    Task<CatalogList<ContentAssetManagementItem>> GetAssetsAsync(
        AssetManagementActor actor,
        AssetManagementFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<ContentAssetManagementItem>> UpsertAssetAsync(
        AssetManagementActor actor,
        UpsertAssetCommand command,
        CancellationToken cancellationToken = default);

    Task<AssetUploadSignResult> SignUploadAsync(
        AssetManagementActor actor,
        AssetUploadSignCommand command,
        CancellationToken cancellationToken = default);

    Task<AssetUploadConfirmResult> ConfirmUploadAsync(
        AssetManagementActor actor,
        AssetUploadConfirmCommand command,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<ContentAssetManagementItem>> ArchiveAssetAsync(
        AssetManagementActor actor,
        Guid assetId,
        CancellationToken cancellationToken = default);

    Task<AssetManagementSignedAccessResult> SignDownloadAsync(
        AssetManagementActor actor,
        AssetAccessSignCommand command,
        CancellationToken cancellationToken = default);

    Task<AssetManagementSignedAccessResult> SignPreviewAsync(
        AssetManagementActor actor,
        AssetAccessSignCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<ContentAssetAccessEventItem>> GetAccessEventsAsync(
        AssetManagementActor actor,
        AssetEventFilter filter,
        CancellationToken cancellationToken = default);

    Task<CatalogList<ContentAssetSecurityScanEventItem>> GetSecurityScanEventsAsync(
        AssetManagementActor actor,
        AssetEventFilter filter,
        CancellationToken cancellationToken = default);

    Task<CatalogList<ContentImportJobItem>> GetImportJobsAsync(
        AssetManagementActor actor,
        ImportJobFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentImportJobDetail> GetImportJobAsync(
        AssetManagementActor actor,
        Guid jobId,
        CancellationToken cancellationToken = default);
}
