import { TooltipTrigger } from "@radix-ui/react-tooltip"; import { eq, isNotNull, sql } from "drizzle-orm"; import { BookAlert, CircleDollarSign, PencilIcon, SendHorizonal, } from "lucide-react"; import type { Metadata } from "next"; import { cookies } from "next/headers"; import Link from "next/link"; import { Suspense } from "react"; import banner from "#/logos/artifact.webp"; import { Blocker } from "@/components/blocker"; import { ComboBox } from "@/components/combobox"; import Image from "@/components/image"; import { SimpleTooltip } from "@/components/tooltip"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Kbd } from "@/components/ui/kbd"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Tooltip, TooltipContent } from "@/components/ui/tooltip"; import { getArtifactConfig } from "@/lib/api"; import { db } from "@/lib/db"; import { characters, submissions } from "@/lib/db/schema"; import { CharacterChooser, ClearCookie, Disclaimer, WarningDialog, } from "./client"; import { ArtifactFormWrapper } from "./form"; import { LiveButton } from "./live"; import { RulesDialog } from "./rules"; import { ActionButton } from "@/components/action-button"; export const metadata: Metadata = { title: "เสือกไอดีชาวบ้าน", description: "ระบบลงคิวดูอาร์ติแฟกต์เกนชินในไลฟ์สตรีม", }; export default async function ArtifactFormPage({ searchParams, }: PageProps<"/artifact">) { const cookie = await cookies(); const sid = cookie.get("sid"); const [q] = sid?.value ? await db.select().from(submissions).where(eq(submissions.id, sid.value)) : []; const clist = await db .select({ label: characters.name, value: characters.name, }) .from(characters) .orderBy(characters.name); const config = await getArtifactConfig(); const count = await db .select({ a: sql`NULL` }) .from(submissions) .where(isNotNull(submissions.queue)) .then((e) => e.length); const { edit: searchEdit } = await searchParams; const editing = q && searchEdit === q.editToken && q.edits < 5; return (