import type { Metadata } from 'next';
import Link from 'next/link';
import { Alert } from '@/components/ui/alert';
import { Pagination } from '@/components/ui/pagination';
import { verifySession } from '@/lib/auth/dal';
import { fetchBoardPosts } from '@/lib/data/repositories/board-post-repository';
import {
  buildBoardPostHref,
  parseBoardPostQuery,
} from '@/lib/domain/board-post-query';
import { BoardFilterBar } from '../_components/board-filter-bar';
import { BoardListToolbar } from '../_components/board-list-toolbar';
import { InquiryTable } from './_components/inquiry-table';

export const metadata: Metadata = {
  title: '1:1문의',
};

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

/**
 * 1:1문의 목록 — 시안 A_BOA_012.
 *
 * 관리자는 글을 등록하지 않고 **조회·답변·삭제만** 한다(사용자 확인 사항) — 그래서 툴바의
 * [신규 등록]을 끈다. 등록을 막는 것은 화면뿐 아니라 Server Action도 마찬가지다.
 */
export default async function Page({ searchParams }: PageProps) {
  await verifySession();

  const query = parseBoardPostQuery('inquiry', await searchParams);
  const { items, totalCount } = await fetchBoardPosts('inquiry', query);

  const totalPages = Math.max(1, Math.ceil(totalCount / query.pageSize));
  const currentPage = Math.min(query.page, totalPages);

  return (
    <section className="flex flex-1 flex-col gap-6 p-8">
      <h1 className="text-headline-sm text-foreground">1:1문의 목록</h1>

      <BoardFilterBar boardType="inquiry" query={query} />

      <BoardListToolbar
        boardType="inquiry"
        query={query}
        canCreate={false}
      />

      <p className="text-body-md text-foreground-muted">
        총 {totalCount}개 | 현재페이지 {currentPage}/{totalPages}
      </p>

      {items.length === 0 ? (
        <Alert
          title="검색 결과가 없습니다."
          actions={
            <Link
              href={buildBoardPostHref('inquiry', query, {
                keyword: '',
                page: 1,
              })}
              className="bg-foreground px-4 py-2 text-background"
            >
              확인
            </Link>
          }
        >
          다른 검색어로 다시 시도해 주세요.
        </Alert>
      ) : (
        <>
          <InquiryTable
            items={items}
            page={currentPage}
            pageSize={query.pageSize}
            totalCount={totalCount}
          />
          <Pagination
            currentPage={currentPage}
            totalPages={totalPages}
            buildHref={(page: number) =>
              buildBoardPostHref('inquiry', query, { page })
            }
          />
        </>
      )}
    </section>
  );
}
