namespace Backend.Contracts;

public sealed record TimelineItem(
    string Key,
    string Title,
    DateOnly StartsAt,
    DateOnly EndsAt,
    string State);

public sealed record FeaturedCategoryDto(
    int Id,
    string GroupName,
    string Name,
    string Description,
    int MaxNomineesPerUser);

public sealed record WinnerPreviewDto(
    int Year,
    string CategoryGroup,
    string Category,
    string WinnerName,
    string WinnerSlug,
    string WinnerPlatform,
    string WinnerUrl,
    string? ClipUrl,
    string? ClipTitle,
    string? ClipPlatform,
    string? ClipEmbedStatus);

public sealed record ArchiveYearDto(
    int Year,
    int WinnerCount);

public sealed record FaqItemDto(string Question, string Answer);

public sealed record PublicSocialLinkDto(
    string Label,
    string Platform,
    string Url,
    string? Icon = null,
    bool ShowOnHost = true,
    bool ShowOnCommunity = true);

public sealed record FooterLinkDto(
    string Key,
    string Label,
    string Url,
    string Content);

public sealed record PublicStreamBannerContentDto(
    string Eyebrow,
    string Title,
    string Text,
    string LiveButtonLabel,
    string LiveButtonUrl,
    string LockedButtonLabel,
    bool UseCompletedContent,
    string CompletedEyebrow,
    string CompletedTitle,
    string CompletedText,
    string CompletedButtonLabel,
    string CompletedButtonUrl);

public sealed record PublicSiteContentDto(
    string HostDisplayName,
    string HostTagline,
    string HostArtistName,
    string HostImageUrl,
    string NewsletterUrl,
    string ShareXUrl,
    string ShareDiscordUrl,
    string PrivacyEmail,
    string PrivacyPolicyContent,
    string AwardsSectionTitle,
    string AwardsSectionDescription,
    string SubcategoriesSectionTitle,
    string SubcategoriesSectionDescription,
    PublicStreamBannerContentDto StreamBanner,
    IEnumerable<PublicSocialLinkDto> SocialLinks,
    IEnumerable<FooterLinkDto> FooterLinks);

public sealed record PublicSiteStatusResponse(
    bool DemoLoginEnabled,
    bool MaintenanceModeEnabled,
    string MaintenanceTitle,
    string MaintenanceMessage);

public sealed record PublicFeatureFlagsDto(
    bool ClipSubmissionsEnabled,
    bool ClipReviewEnabled,
    string ClipSubmissionDisabledMessage,
    bool ShowactApplicationsEnabled,
    DateOnly? ShowactApplicationStartsAt,
    DateOnly? ShowactApplicationEndsAt,
    string ShowactApplicationDisabledMessage,
    bool SponsorsVisible,
    string ShowactFormSchemaJson);

public sealed record OverviewResponse(
    int SeasonId,
    int Year,
    string Title,
    DateOnly ShowDate,
    TimeOnly ShowStartsAt,
    string CurrentPhase,
    bool IsCommunityOnly,
    string LoginProvider,
    IEnumerable<TimelineItem> Timeline,
    IEnumerable<FeaturedCategoryDto> FeaturedCategories,
    IEnumerable<WinnerPreviewDto> WinnersPreview,
    IEnumerable<ArchiveYearDto> ArchiveYears,
    PublicSiteContentDto SiteContent,
    PublicFeatureFlagsDto FeatureFlags,
    IEnumerable<FaqItemDto> Faq);
