namespace Backend.Data;

internal sealed record CategorySeed(string GroupName, 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 static class SeedCatalog
{
    internal static readonly CategorySeed[] CategorySeeds =
    [
        new("Main Awards", "VTuber des Jahres", "vtuber-des-jahres", "Die groesste Auszeichnung des Jahres.", 1),
        new("Discovery", "Best Newcomer", "best-newcomer", "Neue Stimmen, neue Welten und frische Energie fuer 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 ausschliesslich mit deinem Twitch-Account an — nur so kannst du teilnehmen. Das haelt das Voting fair und bot-frei. Danach vergibst du pro Kategorie eine Stimme, aenderbar 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 fuer Fans."),
        new(
            "Wann und wo findet die Award-Show statt?",
            "Die grosse 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 gekuert werden!"),
        new(
            "Ich wurde nominiert — was nun?",
            "Glueckwunsch! Du erhaeltst eine Benachrichtigung mit allen Infos. Teile deine Nominierung gern mit deiner Community und ruf zum Voten auf — jede Stimme zaehlt."),
    ];

    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 fuer organisatorische Fragen bitte die Kontaktseite oder die hinterlegte Kontaktadresse.

Hinweis
Dieses Impressum ist ein redaktioneller Platzhalter und sollte vor dem Livegang mit den tatsaechlichen 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 ueber die hinterlegte Kontaktseite.

Datenschutzfragen
Fuer 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 koennen Sponsor:innen, Medienpartner, Community-Partner und Supporter des VTuber Star Awards vorgestellt werden.

Partner werden im Rahmen der Show und auf den oeffentlichen Kontaktflaechen genannt, sobald sie final bestaetigt sind.
""";

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

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