import type { Metadata } from 'next';
import { verifySession } from '@/lib/auth/dal';
import { fetchStudentMembers } from '@/lib/data/repositories/student-member-repository';
import { parseStudentMemberQuery } from '@/lib/domain/student-member-query';
import { StudentListToolbar } from './_components/student-list-toolbar';
import { StudentSearchBar } from './_components/student-search-bar';

export const metadata: Metadata = {
  title: '학생 회원',
};

interface PageProps {
  searchParams: Promise<Record<string, string | string[] | undefined>>;
}

// 결과 테이블·페이지네이션은 별도 커밋(T3)에서 연결한다 — 여기서는 검색·정렬·표시개수의
// searchParams 배선과 요약 카운트까지만 담당한다(§4.1 승인 범위 한정).
export default async function Page({ searchParams }: PageProps) {
  await verifySession();

  const query = parseStudentMemberQuery(await searchParams);
  const { totalCount } = await fetchStudentMembers(query);
  const totalPages = Math.max(1, Math.ceil(totalCount / query.pageSize));

  return (
    <section className="flex flex-1 flex-col gap-6 p-8">
      <h1 className="text-headline-sm text-foreground">학생 회원 목록</h1>

      <StudentSearchBar query={query} />

      <StudentListToolbar query={query} />

      <p className="text-body-md text-foreground-muted">
        총 {totalCount}명 | 현재페이지 {Math.min(query.page, totalPages)}/
        {totalPages}
      </p>
    </section>
  );
}
