import type React from 'react'
import { cookies } from 'next/headers'
import path from 'path'
import { H5ClientApp } from '@/components/h5/h5-client-app'
import { h5CookieName, verifyH5Cookie, getH5CookieSecret } from '@/lib/h5/cookie'
import { h5PageRepo } from '@/lib/database/repositories/h5-page.repo'
import { workspaceMemberRepo } from '@/lib/database/repositories/workspace-member.repo'
import { parseAppSecrets, getPresetIdByIss } from '@/lib/h5/app-secrets'
import {
  DEFAULT_PRESET_ID,
  resolvePresetTheme,
  resolvePresetVisualStyle,
  resolvePresetWelcomeHighlights,
  resolvePresetWelcomeLayout,
  resolvePresetShowBetaBadge,
} from '@/lib/h5/theme-presets'
import type { H5VisualStyle, H5WelcomeHighlight, H5WelcomeLayout } from '@/lib/h5/theme-presets'
import type { H5Theme } from '@/lib/h5/theme'
import type { Metadata } from 'next'
import type { PageInfo } from '@/lib/h5/types'

export const runtime = 'nodejs'
export const dynamic = 'force-dynamic'

/**
 * 从 forge_h5 cookie 解析出 pageId，查 DB 取页面标题。
 * generateMetadata 和 page 组件共用，避免重复查询。
 */
async function resolvePageTitle(): Promise<string | null> {
  try {
    const cookieStore = await cookies()
    const sessionCookie = cookieStore.get(h5CookieName())?.value
    const payload = verifyH5Cookie(sessionCookie, getH5CookieSecret())
    if (!payload) return null
    const pageRow = h5PageRepo.findById(payload.pageId)
    if (!pageRow) return null
    const workspace = workspaceMemberRepo.findById(pageRow.workspaceId)
    const workspaceName = workspace ? path.basename(workspace.path) : ''
    return pageRow.pageTitle || workspaceName || null
  } catch {
    return null
  }
}

/**
 * 动态设置浏览器/WebView 标题，覆盖 layout.tsx 的静态 "Forge"。
 */
export async function generateMetadata(): Promise<Metadata> {
  const title = await resolvePageTitle()
  return {
    title: title ?? 'Forge',
    description: 'Forge — AI Assistant',
  }
}

/**
 * H5 客户端对话页（§7）。
 *
 * 由 /h5/[slug]/route.ts 在所有路径上 302 到这里（?slug=xxx）。
 * 渲染 H5ClientApp 客户端组件——它通过 /api/h5/* API 检测 cookie 有效性，
 * 有效则加载会话 + 渲染对话，失效则渲染「会话已过期」整页态。
 *
 * P2.5 预设化主题来源（实时查 DB，不依赖 theme cookie 缓存）：
 *   验身份 cookie(forge_h5) → pageId+appId → 查 h5_pages.app_secrets[appId].themePreset
 *   → resolvePresetTheme → H5Theme → 传给 H5ClientApp。
 *
 *   这样 owner 改了预设后，用户下次刷新页面（重新执行本 Server Component）
 *   立即拿到新主题；force-dynamic 保证不缓存。
 */
export default async function H5ClientPage({
  searchParams,
}: {
  searchParams: Promise<{ slug?: string }>
}): Promise<React.JSX.Element> {
  const { slug } = await searchParams

  let theme: H5Theme | undefined
  let visualStyle: H5VisualStyle = 'editorial'
  let welcomeLayout: H5WelcomeLayout = 'standard'
  let welcomeHighlights: readonly H5WelcomeHighlight[] = []
  let showBetaBadge = false
  let initialPageInfo: PageInfo | undefined
  try {
    const cookieStore = await cookies()
    const sessionCookie = cookieStore.get(h5CookieName())?.value
    const payload = verifyH5Cookie(sessionCookie, getH5CookieSecret())
    if (payload) {
      const pageRow = h5PageRepo.findById(payload.pageId)
      if (pageRow) {
        const secrets = parseAppSecrets(pageRow.appSecrets)
        const configuredPresetId = getPresetIdByIss(secrets, payload.appId)
        const presetId = resolvePresetTheme(configuredPresetId) ? configuredPresetId : DEFAULT_PRESET_ID
        theme = resolvePresetTheme(presetId) ?? undefined
        visualStyle = resolvePresetVisualStyle(presetId)
        welcomeLayout = resolvePresetWelcomeLayout(presetId)
        welcomeHighlights = resolvePresetWelcomeHighlights(presetId)
        showBetaBadge = resolvePresetShowBetaBadge(presetId)
        const workspace = workspaceMemberRepo.findById(pageRow.workspaceId)
        const workspaceName = workspace ? path.basename(workspace.path) : ''
        initialPageInfo = {
          pageTitle: pageRow.pageTitle || workspaceName,
          assistantName: pageRow.assistantName,
          workspaceName,
          description: pageRow.description,
          welcomeMessage: pageRow.welcomeMessage,
          iconEmoji: pageRow.iconEmoji,
        }
      }
    }
  } catch {
    // 身份 cookie 无效/缺失/DB 查询失败 → 用默认主题（H5ClientApp 会渲染过期态）
  }

  return (
    <H5ClientApp
      slug={slug ?? ''}
      theme={theme}
      visualStyle={visualStyle}
      welcomeLayout={welcomeLayout}
      welcomeHighlights={welcomeHighlights}
      showBetaBadge={showBetaBadge}
      initialPageInfo={initialPageInfo}
    />
  )
}
