import { notFound } from 'next/navigation'
import { timingSafeEqual } from 'crypto'
import { certificateKey, eventClosingReport } from '@/lib/certificate'
import ClosingCertificate from '@/components/ClosingCertificate'
import { brandMetadata, getPublicBrand } from '@/lib/org-brand'
import { eq } from 'drizzle-orm'
import { db, schema } from '@/db'

export const dynamic = 'force-dynamic'
export async function generateMetadata({ params }: { params: Promise<{ id: string }> }) {
  const { id } = await params
  const [e] = /^[0-9a-f-]{36}$/.test(id) ? await db.select({ orgId: schema.events.orgId }).from(schema.events).where(eq(schema.events.id, id)) : []
  return { ...(await brandMetadata(e?.orgId, 'Certificado de evento')), robots: { index: false } }
}

export default async function PublicCertificate({ params, searchParams }: {
  params: Promise<{ id: string }>; searchParams: Promise<{ k?: string }>
}) {
  const { id } = await params
  const { k = '' } = await searchParams
  if (!/^[0-9a-f-]{36}$/.test(id)) notFound()
  const expected = Buffer.from(certificateKey(id)), given = Buffer.from(k)
  if (expected.length !== given.length || !timingSafeEqual(expected, given)) notFound()

  const r = await eventClosingReport(id)
  if (!r || !r.minors.enabled) notFound()

  return (
    <main className="min-h-dvh bg-gray-100 px-4 py-10 print:bg-white print:p-0">
      <ClosingCertificate r={r} audience="public" brand={(await getPublicBrand(r.event.orgId))!} />
    </main>
  )
}
