import { NextResponse } from "next/server";
import { DISCORD_INVITE_CODE, DISCORD_INVITE_URL, type DiscordCommunityStatus } from "../../../lib/discord";

export const dynamic = "force-dynamic";

export async function GET() {
  try {
    const response = await fetch(
      `https://discord.com/api/v10/invites/${DISCORD_INVITE_CODE}?with_counts=true&with_expiration=true`,
      {
        cache: "no-store",
        headers: { "User-Agent": "BexoGames.de Website" },
      }
    );

    if (!response.ok) {
      const payload: DiscordCommunityStatus = {
        ok: false,
        invite: DISCORD_INVITE_URL,
        error: `Discord API antwortete mit ${response.status}`,
      };
      return NextResponse.json(payload, { status: 200 });
    }

    const data = await response.json();
    const guild = data.guild ?? {};
    const icon = guild.id && guild.icon
      ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=128`
      : null;

    const payload: DiscordCommunityStatus = {
      ok: true,
      name: guild.name ?? "BexoGames",
      icon,
      members: data.approximate_member_count ?? null,
      online: data.approximate_presence_count ?? null,
      invite: DISCORD_INVITE_URL,
    };

    return NextResponse.json(payload);
  } catch (error) {
    const payload: DiscordCommunityStatus = {
      ok: false,
      invite: DISCORD_INVITE_URL,
      error: error instanceof Error ? error.message : "Discord konnte nicht geladen werden",
    };
    return NextResponse.json(payload, { status: 200 });
  }
}
