import { NextRequest, NextResponse } from 'next/server'
import crypto from 'crypto'
import path from 'path'
import { h5PageRepo } from '@/lib/database/repositories/h5-page.repo'
import { workspaceMemberRepo } from '@/lib/database/repositories/workspace-member.repo'
import { generateSlug } from '@/lib/h5/app-secrets'
import { isAuthError, requireUser, requireWorkspaceWriteAccess } from '@/lib/auth/session'

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

/**
 * GET /api/h5/pages?workspaceId=xxx
 *   列出 owner 的 H5 页面（通过 workspace 反查 owner）
 *   或按 workspaceId 查单个（H5View 跟随 activeWorkspaceId）
 */
export async function GET(req: NextRequest): Promise<NextResponse> {
  try {
    const user = await requireUser()
    const workspaceId = req.nextUrl.searchParams.get('workspaceId')

    if (workspaceId) {
      // 校验：必须是该 workspace 的 owner（或成员）
      try {
        await requireWorkspaceWriteAccess(workspaceId)
      } catch (err) {
        if (isAuthError(err)) return err as NextResponse
        throw err
      }
      const page = h5PageRepo.findByWorkspace(workspaceId)
      return NextResponse.json(page ?? null)
    }

    // 无 workspaceId：列出 owner 全部
    const pages = h5PageRepo.listByOwner(user.id)
    return NextResponse.json(pages)
  } catch (err) {
    if (isAuthError(err)) return err as NextResponse
    throw err
  }
}

/**
 * POST /api/h5/pages
 *   为 workspace 创建 H5 页面（一 workspace 仅一个，UNIQUE 约束保证）
 *   自动生成 slug
 */
export async function POST(req: NextRequest): Promise<NextResponse> {
  try {
    const user = await requireUser()
    const body = await req.json()
    const { workspaceId, defaultModel, permissionMode } = body as {
      workspaceId?: string
      defaultModel?: string
      permissionMode?: 'confirm' | 'full'
    }

    if (!workspaceId) {
      return NextResponse.json({ error: 'workspaceId required' }, { status: 400 })
    }

    try {
      await requireWorkspaceWriteAccess(workspaceId)
    } catch (err) {
      if (isAuthError(err)) return err as NextResponse
      throw err
    }

    // 已存在则返回现有（幂等）
    const existing = h5PageRepo.findByWorkspace(workspaceId)
    if (existing) {
      return NextResponse.json(existing, { status: 200 })
    }

    // 生成唯一 slug（重试最多 5 次）
    let slug = generateSlug()
    let retries = 0
    while (h5PageRepo.slugExists(slug) && retries < 5) {
      slug = generateSlug()
      retries++
    }

    // 默认用 workspace 文件夹名作为页面名称和引导语占位
    const workspace = workspaceMemberRepo.findById(workspaceId)
    const workspaceName = workspace ? path.basename(workspace.path) : '智能体方案'
    const defaultWelcomeMessage = `嗨，我是 **${workspaceName}** 智能体助手。

我能帮你：
- 快速理解这个方案的定位和能力边界
- 把复杂任务拆解成可执行的步骤
- 基于项目上下文给出具体建议

想从哪开始？直接告诉我你当前遇到的具体问题，或选一句上面的方向。`

    const page = h5PageRepo.create({
      id: crypto.randomUUID(),
      workspaceId,
      slug,
      defaultModel,
      permissionMode,
      pageTitle: workspaceName,
      welcomeMessage: defaultWelcomeMessage,
    })

    return NextResponse.json(page, { status: 201 })
  } catch (err) {
    if (isAuthError(err)) return err as NextResponse
    throw err
  }
}
