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

namespace Tiku.Application.Content;

public sealed record ContentNavigationFilter(
    Guid TenantId,
    Guid? RegionId = null,
    Guid? EntryId = null,
    Guid? NodeId = null,
    Guid? CollectionId = null,
    Guid? ParentId = null,
    bool ParentWasSpecified = false,
    bool ParentIsRoot = false,
    string? EntryType = null,
    string? CollectionType = null,
    string? Mode = null,
    string? MarkerType = null,
    string? Keyword = null,
    bool IncludeHidden = false,
    bool IncludeInactive = false,
    int? Limit = null);

public sealed record ContentEntryCatalogItem(
    Guid Id,
    Guid? RegionId,
    string? LegacyId,
    string EntryKey,
    string Name,
    ContentEntryType EntryType,
    string? Icon,
    string? Route,
    string? Description,
    ContentVisibility Visibility,
    JsonElement AccessRules,
    JsonElement LayoutConfig,
    int Order);

public sealed record ContentNodeCatalogItem(
    Guid Id,
    Guid EntryId,
    Guid? RegionId,
    Guid? ParentId,
    string? LegacyId,
    string? NodeKey,
    string Name,
    ContentNodeType NodeType,
    ContentMarkerType? MarkerType,
    JsonElement MarkerConfig,
    string? Path,
    int Depth,
    int Order,
    bool IsSelectable,
    bool IsLeaf,
    JsonElement AccessRules,
    JsonElement Metadata);

public sealed record QuestionCollectionCatalogItem(
    Guid Id,
    Guid? RegionId,
    Guid? EntryId,
    Guid? NodeId,
    Guid? SubjectId,
    Guid? CategoryId,
    Guid? QuestionBankId,
    string? LegacyId,
    string Name,
    QuestionCollectionType CollectionType,
    QuestionCollectionSourceType SourceType,
    JsonElement Filters,
    int QuestionCount,
    decimal? TotalScore,
    int? DurationMinutes,
    ContentStatus Status,
    int Order,
    JsonElement AccessRules,
    JsonElement Metadata);

public sealed record PracticeBlueprintCatalogItem(
    Guid Id,
    Guid? RegionId,
    Guid? EntryId,
    Guid? NodeId,
    Guid? CollectionId,
    string? LegacyId,
    string Name,
    PracticeMode Mode,
    PracticeAssemblyType AssemblyType,
    int? QuestionLimit,
    int? DurationMinutes,
    decimal? TotalScore,
    decimal? PassScore,
    JsonElement Sections,
    JsonElement Rules,
    JsonElement AccessRules,
    ContentStatus Status,
    int Order);

public sealed record CollectionQuestionCatalogItem(
    Guid Id,
    string? LegacyId,
    Guid? EntryId,
    Guid? ContentNodeId,
    Guid? PrimaryCollectionId,
    Guid? SubjectId,
    Guid? CategoryId,
    Guid? NodeId,
    string Type,
    string? TypeLabel,
    int? Difficulty,
    JsonElement Tags,
    JsonElement ExamMarkers,
    string? MediaUrl,
    bool HasVideoExplanation,
    string? SectionKey,
    decimal? Score,
    int Order,
    Guid? VersionId,
    string? Content,
    JsonElement Options,
    int? CorrectOptionIndex,
    JsonElement CorrectOptionIndices,
    string? AnswerText,
    string? Explanation,
    JsonElement SubQuestions,
    string? CodeLang,
    string? CodeTemplate);
