namespace Backend.Data;

using Backend.Services;

internal sealed record AwardCategorySeed(string LegacyGroupName, string Name, string Slug, string Description, int SortOrder);
internal sealed record CandidateSeed(string CategorySlug, string DisplayName, string ChannelSlug, string Platform);
internal sealed record WinnerSeed(int Year, string CategorySlug, string DisplayName, string ChannelSlug, string Platform);
internal sealed record SiteFaqSeed(string Question, string Answer);
internal sealed record SiteSocialSeed(string Label, string Platform, string Url, string Icon);
internal sealed record SponsorSeed(string Name, string WebsiteUrl, string LogoUrl, string Description, string Tier, int SortOrder);

internal static class SeedCatalog
{
    internal static readonly SeasonSubcategoryTemplateSetting[] DefaultSubcategoryTemplates =
    [
        new("Hidden Star", "hidden-star", 1, 1, 20),
        new("Rising Star", "rising-star", 2, 21, 60),
        new("Shining Star", "shining-star", 3, 61, null),
    ];

    internal static readonly AwardCategorySeed[] AwardCategorySeeds =
    [
        new("Main Awards", "VTuber des Jahres", "vtuber-des-jahres", "Die größte Auszeichnung des Jahres.", 1),
        new("Discovery", "Best Newcomer", "best-newcomer", "Neue Stimmen, neue Welten und frische Energie für die Szene.", 2),
        new("Creative", "Model & Design", "model-design", "Live2D, 3D, Outfit, Rigging und visuelle Identitaet.", 3),
        new("Performance", "Gesang & Musik", "gesang-musik", "Songs, Covers, Konzerte und musikalische Highlights.", 4),
        new("Gaming", "Best Gaming", "best-gaming", "Gameplay, Skill, Chaos und legendaere Gaming-Momente.", 5),
        new("Entertainment", "Best Variety", "best-variety", "Talk, Comedy, Watchalongs und kreative Streamformate.", 6),
        new("Community", "Community Liebling", "community-liebling", "Creator:innen, die ihre Community besonders stark verbinden.", 7),
        new("Collab", "Best Collab & Duo", "best-collab-duo", "Gemeinsame Streams, Projekte und Duo-Dynamik.", 8),
    ];

    internal static readonly Dictionary<string, string> LegacyCategorySlugMap = new(StringComparer.OrdinalIgnoreCase)
    {
        ["bestes-live-event"] = "best-newcomer",
        ["clip-des-jahres"] = "model-design",
        ["beste-community"] = "gesang-musik",
    };

    internal static readonly SiteFaqSeed[] SiteFaqSeeds =
    [
        new(
            "Wer darf nominiert werden?",
            "Jede:r aktive deutschsprachige VTuber kann nominiert werden — unabhaengig von Follower-Zahl oder Plattform. Die Community schlaegt in der Nominierungsphase ihre Favorit:innen vor."),
        new(
            "Wie funktioniert das Voting?",
            "Du meldest dich ausschließlich mit deinem Twitch-Account an — nur so kannst du teilnehmen. Das hält das Voting fair und bot-frei. Danach vergibst du pro Kategorie eine Stimme, änderbar bis zum Ende der Phase."),
        new(
            "Was kostet die Teilnahme?",
            "Gar nichts. Nominieren, voten und die Show schauen ist komplett kostenlos — der VTuber Star Award ist ein Community-Event von Fans für Fans."),
        new(
            "Wann und wo findet die Award-Show statt?",
            "Die große Live-Show wird von Jayuhime gehostet und auf Twitch & YouTube gestreamt. Den genauen Termin findest du im Countdown oben — sei live dabei, wenn die Stars gekürt werden!"),
        new(
            "Ich wurde nominiert — was nun?",
            "Glückwunsch! Du erhältst eine Benachrichtigung mit allen Infos. Teile deine Nominierung gern mit deiner Community und ruf zum Voten auf — jede Stimme zählt."),
    ];

    internal static readonly SiteSocialSeed[] SiteSocialSeeds =
    [
        new("Twitch", "twitch", "https://twitch.tv/jayuhime", "twitch"),
        new("YouTube", "youtube", "https://youtube.com/c/Jayuhime", "youtube"),
        new("X", "x", "https://x.com/jayuhime", "x"),
        new("Instagram", "instagram", "https://instagram.com/jayuhime", "instagram"),
        new("Discord", "discord", "https://discord.gg/jayuhime", "discord"),
    ];

    internal const string DefaultImprintContent = """
Anbieter
VTuber Star Awards, vertreten durch Jayuhime.

Kontakt
Nutze für organisatorische Fragen bitte die Kontaktseite oder die hinterlegte Kontaktadresse.

Hinweis
Dieses Impressum ist ein redaktioneller Platzhalter und sollte vor dem Livegang mit den tatsächlichen Anbieterangaben ersetzt werden.
""";

    internal const string DefaultContactContent = """
Kontakt zum Award-Team
Du hast Fragen zur Nominierung, zum Voting, zu Clips oder zur Show? Schreib dem Team über die hinterlegte Kontaktseite.

Datenschutzfragen
Für Datenschutzanfragen nutze bitte die Datenschutz-E-Mail aus diesem Footer.

Community & Kooperationen
Social Links und Partneranfragen werden vom Admin-Team gepflegt und koordiniert.
""";

    internal const string DefaultSponsorsContent = """
Sponsoren & Partner
Hier können Sponsor:innen, Medienpartner, Community-Partner und Supporter des VTuber Star Awards vorgestellt werden.

Partner werden im Rahmen der Show und auf den öffentlichen Kontaktflächen genannt, sobald sie final bestätigt sind.
""";

    internal static readonly CandidateSeed[] CurrentCandidateSeeds =
    [
        new("vtuber-des-jahres-shining-star", "Hoshimi Miyu", "@hoshimimiyu", "Twitch"),
        new("vtuber-des-jahres-shining-star", "Kurainu", "@kurainu", "Twitch"),
        new("vtuber-des-jahres-shining-star", "Shiro Ch.", "@shiroch", "Twitch"),
        new("best-newcomer-hidden-star", "Aoi Sakura", "@aoisakura", "YouTube"),
        new("best-newcomer-rising-star", "Nox Live", "@noxlive", "Twitch"),
        new("model-design-shining-star", "Velvet Rei", "@velvetrei", "Twitch"),
        new("model-design-rising-star", "Mochi Atelier", "@mochiatelier", "Cake"),
        new("gesang-musik-shining-star", "Melo Diva", "@melodiva", "YouTube"),
        new("gesang-musik-rising-star", "Yuki Stern", "@yukistern", "Twitch"),
        new("best-gaming-shining-star", "Kurainu", "@kurainu", "Twitch"),
        new("best-gaming-rising-star", "PixelPunk", "@pixelpunk", "Twitch"),
        new("best-variety-shining-star", "Taro Chaos", "@tarochaos", "Twitch"),
        new("best-variety-rising-star", "Kotaro Plays", "@kotaroplays", "YouTube"),
        new("community-liebling-shining-star", "Shiro Ch.", "@shiroch", "Twitch"),
        new("community-liebling-hidden-star", "Lumi", "@lumi_vt", "Cake"),
        new("best-collab-duo-shining-star", "Akari & Nox", "@akari_vt", "Twitch"),
        new("best-collab-duo-rising-star", "Mochi & Hana", "@mochi_mochi", "YouTube"),
    ];

    internal static readonly WinnerSeed[] WinnerSeeds =
    [
        new(2025, "vtuber-des-jahres-shining-star", "Hoshimi Miyu", "@hoshimimiyu", "Twitch"),
        new(2025, "best-newcomer-hidden-star", "Aoi Sakura", "@aoisakura", "YouTube"),
        new(2025, "model-design-shining-star", "Velvet Rei", "@velvetrei", "Twitch"),
        new(2025, "gesang-musik-shining-star", "Melo Diva", "@melodiva", "YouTube"),
        new(2025, "best-gaming-shining-star", "Kurainu", "@kurainu", "Twitch"),
        new(2025, "best-variety-shining-star", "Taro Chaos", "@tarochaos", "Twitch"),
        new(2025, "community-liebling-shining-star", "Shiro Ch.", "@shiroch", "Twitch"),
        new(2025, "best-collab-duo-shining-star", "Akari & Nox", "@akari_vt", "Cake"),
        new(2024, "vtuber-des-jahres-shining-star", "Aoi Sakura", "@aoisakura", "YouTube"),
        new(2024, "best-newcomer-hidden-star", "Lumi", "@lumi_vt", "Cake"),
        new(2024, "model-design-rising-star", "Mochi Atelier", "@mochiatelier", "Cake"),
        new(2024, "gesang-musik-rising-star", "Yuki Stern", "@yukistern", "Twitch"),
        new(2024, "best-gaming-shining-star", "Starbyte", "@starbyte", "Twitch"),
        new(2024, "best-variety-rising-star", "Kotaro Plays", "@kotaroplays", "YouTube"),
        new(2024, "community-liebling-rising-star", "Moonrelay", "@moonrelay", "Twitch"),
        new(2024, "best-collab-duo-rising-star", "Pixel & Kotaro", "@pixelpunk", "Twitch"),
        new(2023, "vtuber-des-jahres-shining-star", "Akari Nova", "@akarinova", "Twitch"),
        new(2023, "best-newcomer-rising-star", "Nox Live", "@noxlive", "Twitch"),
        new(2023, "model-design-shining-star", "Rei Velvet", "@reivelvet", "YouTube"),
        new(2023, "gesang-musik-shining-star", "Tenshi Vox", "@tenshivox", "Twitch"),
        new(2023, "best-gaming-rising-star", "Bit Knight", "@bitknight", "Twitch"),
        new(2023, "best-variety-hidden-star", "Hana Hearts", "@hanahearts", "Cake"),
        new(2023, "community-liebling-rising-star", "Sora Blau", "@sorablau", "YouTube"),
        new(2023, "best-collab-duo-rising-star", "Yuki & Melo", "@yukistern", "Twitch"),
    ];

    internal static readonly SponsorSeed[] DemoSponsorSeeds =
    [
        new(
            "HoshiForge Studio",
            "https://hoshiforge.example",
            "/demo/sponsors/hoshiforge-studio.svg",
            "Branding-, Overlay- und Debuet-Visuals fuer VTuber-Projekte und Community-Events.",
            "Presenting Sponsor",
            10),
        new(
            "NekoPixel Energy",
            "https://nekopixel.example",
            "/demo/sponsors/nekopixel-energy.svg",
            "Community-fokussierter Drink-Partner fuer lange Showabende, Watchpartys und Creator-Collabs.",
            "Gold Partner",
            20),
        new(
            "PrismLoop Audio",
            "https://prismloop.example",
            "/demo/sponsors/prismloop-audio.svg",
            "Audio-Tools, Intro-Packs und Stream-Sounddesign fuer Live-Shows und Highlight-Clips.",
            "Gold Partner",
            30),
        new(
            "CloudBeacon Hosting",
            "https://cloudbeacon.example",
            "/demo/sponsors/cloudbeacon-hosting.svg",
            "Skalierbares Hosting fuer Voting, Landingpages und Event-Traffic rund um Showtage.",
            "Tech Partner",
            40),
        new(
            "ChibiCanvas Market",
            "https://chibicanvas.example",
            "/demo/sponsors/chibicanvas-market.svg",
            "Merch-, Sticker- und Artist-Marketplace mit Fokus auf VTuber, Emotes und Fanartikel.",
            "Community Partner",
            50),
    ];
}
