import { NextRequest, NextResponse } from 'next/server'
import path from 'path'
import { authenticateH5FromCookieHeader, getCookieHeaderFromRequest } from '@/lib/h5/auth'
import { mapMessagesForH5Response } from '@/lib/h5/message-content'
import { messageRepo } from '@/lib/database/repositories/message.repo'
import { workspaceMemberRepo } from '@/lib/database/repositories/workspace-member.repo'
import { h5Router } from '@/lib/h5/router'
import type { H5BootstrapResponse } from '@/lib/h5/types'

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

/**
 * GET /api/h5/bootstrap — H5 首屏一次性数据。
 *
 * 鉴权：forge_h5 cookie。
 * 返回：page 元信息 + 会话列表（updatedAt 倒序）+ 默认会话消息（已 strip）。
 *
 * 设计目标：去掉 mount 时 session/list → messages 的串行瀑布；
 * 切换会话 / 流式 done 刷新仍走 /api/h5/messages。
 */
export async function GET(req: NextRequest): Promise<NextResponse> {
  const auth = authenticateH5FromCookieHeader(getCookieHeaderFromRequest(req))
  if (!auth) {
    return NextResponse.json({ error: 'Session expired' }, { status: 401 })
  }

  const { page, payload, pageRow } = auth

  const workspace = workspaceMemberRepo.findById(pageRow.workspaceId)
  const workspaceName = workspace ? path.basename(workspace.path) : ''

  const pageInfo = {
    pageTitle: pageRow.pageTitle || workspaceName,
    assistantName: pageRow.assistantName,
    workspaceName,
    description: pageRow.description,
    welcomeMessage: pageRow.welcomeMessage,
    iconEmoji: pageRow.iconEmoji,
  }

  const sessions = h5Router.listSessions(payload.externalUserId, page.workspaceId)
  const currentSessionId = sessions.length > 0 ? sessions[0].id : null

  let messages: H5BootstrapResponse['messages'] = []
  if (currentSessionId) {
    // list 已按 external_user_id 过滤；再 resolve 防异常数据旁路
    try {
      h5Router.resolveSession(page, payload.externalUserId, currentSessionId)
      const raw = messageRepo.listBySession(currentSessionId)
      messages = mapMessagesForH5Response(raw)
    } catch {
      // 归属异常时不阻塞首屏：空消息 + 仍返回 sessions，用户可手动切换
      messages = []
    }
  }

  const body: H5BootstrapResponse = {
    page: pageInfo,
    sessions,
    currentSessionId,
    messages,
  }

  return NextResponse.json(body)
}
