using TeleWave.Application.Library.Collections;
using TeleWave.Domain.Library;
using TeleWave.Domain.Media;

namespace TeleWave.Application.Library;

public sealed record ShowSummaryDto(
    Guid Id,
    string Name,
    string? OriginalName,
    ShowKind Kind,
    ShowAudience? Audience,
    int EpisodeCount,
    int SeasonCount,
    int? Year,
    bool HasPoster,
    DateTimeOffset CreatedAt,
    /// <summary>Название основного жанра — в списке колонка показывает его.</summary>
    string? PrimaryGenre,
    /// <summary>Названия прочих жанров — в списке прячутся под «…», полный набор правится в карточке шоу.</summary>
    IReadOnlyList<string> OtherGenres
);

/// <summary>Жанр, проставленный шоу.</summary>
public sealed record ShowGenreDto(Guid Id, string Name, bool IsPrimary);

public sealed record EpisodeDto(
    Guid Id,
    Guid MediaAssetId,
    int Position,
    string? AssetName,
    MediaAssetStatus? AssetStatus,
    double? DurationSeconds,
    int? Season,
    int? Episode,
    string? Title,
    string? Overview,
    Guid? StillImageId,
    DateOnly? AirDate
);

public sealed record ShowDto(
    Guid Id,
    string Name,
    string? OriginalName,
    ShowKind Kind,
    ShowAudience? Audience,
    string? Description,
    string? MetadataProvider,
    string? MetadataExternalId,
    int? Year,
    Guid? PosterImageId,
    IReadOnlyList<EpisodeDto> Episodes,
    IReadOnlyList<ShowGenreDto> Genres,
    /// <summary>Коллекции (франшизы), в которые входит шоу, с его позицией в каждой.</summary>
    IReadOnlyList<ShowCollectionRefDto> Collections
);
