using PlotLine.Models;

namespace PlotLine.ViewModels;

public sealed class IllustrationLibraryAdminViewModel
{
    public IllustrationLibraryFilter Filter { get; init; } = new();
    public IllustrationLibrarySummary Summary { get; init; } = new();
    public IReadOnlyList<IllustrationLibraryItem> Items { get; init; } = [];
    public IReadOnlyList<string> Categories { get; init; } = IllustrationLibraryCategories.All;
    public IReadOnlyList<string> Statuses { get; init; } =
    [
        IllustrationLibraryStatuses.Planned,
        IllustrationLibraryStatuses.Queued,
        IllustrationLibraryStatuses.Generating,
        IllustrationLibraryStatuses.Generated,
        IllustrationLibraryStatuses.Approved,
        IllustrationLibraryStatuses.Rejected,
        IllustrationLibraryStatuses.Failed,
        IllustrationLibraryStatuses.Superseded,
        IllustrationLibraryStatuses.Disabled
    ];
    public int StarterCharacterCount { get; init; }
    public int StarterLocationCount { get; init; }
    public int StarterAssetCount { get; init; }
    public IllustrationStarterGenerationPlan StarterGenerationPlan { get; init; } = new(0, 0, 0);
    public string StoragePathHint { get; init; } = "/uploads/story-intelligence-library";
    public string ProviderStatus { get; init; } = string.Empty;
    public int CompletedTotal => Summary.GeneratedCount + Summary.ApprovedCount + Summary.FailedCount + Summary.SupersededCount;
}

public sealed class IllustrationLibraryQueueForm
{
    public bool Confirmed { get; set; }
    public string? Category { get; set; }
    public string? Status { get; set; }
    public string? Search { get; set; }
}

public sealed class IllustrationLibraryBulkRetryForm
{
    public string? Category { get; set; }
    public string? Status { get; set; }
    public string? Search { get; set; }
}

public sealed class IllustrationStarterGenerationForm
{
    public bool Confirmed { get; set; }
}

public sealed class IllustrationLibraryRejectForm
{
    public string? Reason { get; set; }
    public string? Category { get; set; }
    public string? Status { get; set; }
    public string? Search { get; set; }
}

public sealed class IllustrationLibraryMetadataForm
{
    public string? DisplayTitle { get; set; }
    public string? ShortDescription { get; set; }
    public string? MetadataJson { get; set; }
    public string? AdminNotes { get; set; }
    public string? Category { get; set; }
    public string? Status { get; set; }
    public string? Search { get; set; }
}
