import { PostList } from "@/app/components/PostList";
import { HeroBanner } from "@/app/components/HeroBanner";
import { BoardToolbar } from "@/app/components/BoardToolbar";
import { headers } from "next/headers";
import prisma from "@/lib/prisma";

// Next 15: params/searchParams가 Promise가 될 수 있어 안전 언랩 처리합니다.
export default async function BoardDetail({ params, searchParams }: { params: any; searchParams: any }) {
  const p = params?.then ? await params : params;
  const sp = searchParams?.then ? await searchParams : searchParams;
  const idOrSlug = p.id as string;
  const sort = (sp?.sort as "recent" | "popular" | undefined) ?? "recent";
  // 보드 slug 조회 (새 글 페이지 프리셋 전달)
  const h = await headers();
  const host = h.get("host") ?? "localhost:3000";
  const proto = h.get("x-forwarded-proto") ?? "http";
  const base = process.env.NEXT_PUBLIC_BASE_URL || `${proto}://${host}`;
  const res = await fetch(new URL("/api/boards", base).toString(), { cache: "no-store" });
  const { boards } = await res.json();
  const board = (boards || []).find((b: any) => b.slug === idOrSlug || b.id === idOrSlug);
  const id = board?.id as string;
  const siblingBoards = (boards || []).filter((b: any) => b.category?.id && b.category.id === board?.category?.id);
  const categoryName = board?.category?.name ?? "";

  // 리스트 뷰 타입 확인 (특수랭킹일 경우 게시글 대신 랭킹 노출)
  const boardView = await prisma.board.findUnique({
    where: { id },
    select: { listViewType: { select: { key: true } } },
  });
  const isSpecialRanking = boardView?.listViewType?.key === "list_special_rank";

  let rankingItems: { userId: string; nickname: string; points: number }[] = [];
  if (isSpecialRanking) {
    const topUsers = await prisma.user.findMany({
      select: { userId: true, nickname: true, points: true },
      where: { status: "active" },
      orderBy: { points: "desc" },
      take: 100,
    });
    rankingItems = topUsers.map((u) => ({ userId: u.userId, nickname: u.nickname, points: u.points }));
  }
  return (
    <div className="space-y-6">
      {/* 상단 배너 (서브카테고리 표시) */}
      <section>
        <HeroBanner
          subItems={siblingBoards.map((b: any) => ({ id: b.id, name: b.name, href: `/boards/${b.slug}` }))}
          activeSubId={id}
        />
      </section>

      {/* 검색/필터 툴바 + 리스트 */}
      <section>
        {!isSpecialRanking && <BoardToolbar boardId={board?.slug} />}
        <div className="p-0">
          {isSpecialRanking ? (
            <div className="rounded-xl border border-neutral-200 overflow-hidden">
              <div className="px-4 py-3 border-b border-neutral-200 flex items-center justify-between bg-[#f6f4f4]">
                <h2 className="text-sm text-neutral-700">포인트 랭킹</h2>
              </div>
              <ol className="divide-y divide-neutral-200">
                {rankingItems.map((i, idx) => (
                  <li key={i.userId} className="px-4 py-3 flex items-center justify-between">
                    <div className="flex items-center gap-3 min-w-0">
                      <span className="inline-flex items-center justify-center w-6 h-6 rounded-full bg-neutral-900 text-white text-xs">{idx + 1}</span>
                      <span className="truncate text-neutral-900 font-medium">{i.nickname || "회원"}</span>
                    </div>
                    <div className="shrink-0 text-sm text-neutral-700">{i.points}점</div>
                  </li>
                ))}
                {rankingItems.length === 0 && (
                  <li className="px-4 py-10 text-center text-neutral-500">랭킹 데이터가 없습니다.</li>
                )}
              </ol>
            </div>
          ) : (
            <PostList
              boardId={id}
              sort={sort}
              variant="board"
              newPostHref={`/posts/new?boardId=${id}${board?.slug ? `&boardSlug=${board.slug}` : ""}`}
            />
          )}
        </div>
      </section>
    </div>
  );
}


