using System.Text.Json;
using Tiku.Domain.Content;

namespace Tiku.Application.Assets;

public sealed record AssetFilter(
    Guid TenantId,
    Guid? RegionId = null,
    Guid? SubjectId = null,
    Guid? CategoryId = null,
    Guid? ContentNodeId = null,
    Guid? QuestionId = null,
    Guid? AssetId = null,
    string? AssetType = null,
    string? Category = null,
    string? AssetKey = null,
    string? Keyword = null,
    bool IncludeLocked = false,
    bool IncludeInactive = false,
    int? Limit = null);

public sealed record ContentAssetCatalogItem(
    Guid Id,
    string? LegacyId,
    Guid? RegionId,
    Guid? SubjectId,
    Guid? CategoryId,
    Guid? ContentNodeId,
    string? AssetKey,
    string? Title,
    string? Category,
    string? Description,
    string? FileName,
    string? CdnUrl,
    bool IsPublic,
    ContentAssetType AssetType,
    AssetStorageProvider StorageProvider,
    string? Bucket,
    string? ObjectKey,
    string? MimeType,
    long? FileSizeBytes,
    string? ChecksumSha256,
    ContentVisibility Visibility,
    string? PreviewUrl,
    ContentStatus Status,
    int Order,
    AssetUploadStatus UploadStatus,
    DateTimeOffset? VerifiedAt,
    AssetPreviewStatus PreviewStatus,
    AssetSecurityScanStatus SecurityScanStatus,
    JsonElement Metadata);

public sealed record ImageAssetCatalogItem(
    Guid Id,
    string? LegacyId,
    string? Title,
    string? Category,
    string? FileName,
    bool IsPublic,
    string? CdnUrl,
    JsonElement Metadata);

public sealed record AppAssetCatalogItem(
    Guid Id,
    string? LegacyId,
    string AssetKey,
    string? FileName,
    string? Description,
    JsonElement Metadata);

public sealed record VideoExplanationCatalogItem(
    Guid Id,
    string? LegacyId,
    Guid? SubjectId,
    string Title,
    string? Description,
    string? VideoUrl,
    string? ThumbnailUrl,
    int? DurationSeconds,
    JsonElement KnowledgeTags,
    bool IsGeneral,
    int? Difficulty,
    int Order,
    bool IsActive,
    JsonElement Metadata);

public sealed record QuestionVideoCatalogItem(
    Guid Id,
    string? LegacyId,
    Guid? QuestionId,
    Guid? VideoId,
    QuestionVideoType VideoType,
    int Order,
    JsonElement Metadata,
    VideoExplanationCatalogItem? Video);
