import { notFound } from "next/navigation"

import { requireAuth } from "@/shared/lib/auth-guard"
import { getSearchParam } from "@/shared/lib/utils"
import {
  verifyParentChildRelation,
  getChildDashboardData,
  getChildNameList,
} from "@/modules/parent/data-access"
import { ChildDetailHeader } from "@/modules/parent/components/child-detail-header"
import {
  ChildDetailPanel,
  SiblingSwitcher,
} from "@/modules/parent/components/child-detail-panel"
import { EmptyState } from "@/shared/components/ui/empty-state"
import { ShieldAlert } from "lucide-react"
import { getTranslations } from "next-intl/server"

export const dynamic = "force-dynamic"

export default async function ChildDetailPage({
  params,
  searchParams,
}: {
  params: Promise<{ studentId: string }>
  searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
  const { studentId } = await params
  const sp = await searchParams
  const ctx = await requireAuth()
  const t = await getTranslations("common")

  // 校验当前家长与该子女存在关系（同时按 parentId + studentId 过滤，防止跨家庭信息泄露）
  const relation = await verifyParentChildRelation(studentId, ctx.userId)

  // dataScope 二次校验：admin/其他角色可能通过 requireAuth，但需确认 dataScope 包含该子女
  const isInScope =
    ctx.dataScope.type === "all" ||
    (ctx.dataScope.type === "children" && ctx.dataScope.childrenIds.includes(studentId))

  if (!relation || !isInScope) {
    return (
      <div className="p-6 md:p-8">
        <EmptyState
          icon={ShieldAlert}
          title={t("accessDenied")}
          description={t("accessDeniedDesc")}
          className="border-none shadow-none"
        />
      </div>
    )
  }

  const [child, siblings] = await Promise.all([
    getChildDashboardData(studentId, relation),
    getChildNameList(ctx.userId),
  ])
  if (!child) {
    notFound()
  }

  const initialTab = getSearchParam(sp, "tab")

  return (
    <div className="p-6 md:p-8 space-y-6">
      <ChildDetailHeader child={child} />
      <ChildDetailPanel
        child={child}
        initialTab={initialTab}
        siblingSwitcher={
          <SiblingSwitcher
            current={{ id: child.basicInfo.id, name: child.basicInfo.name }}
            siblings={siblings}
          />
        }
      />
    </div>
  )
}
