import { getSessionAdmin } from '@/lib/auth/dal';
import {
  LOGOUT_ERROR_QUERY_PARAM,
  SESSION_REVOKED_QUERY_PARAM,
} from '@/lib/constants/logout';
import { redirect } from 'next/navigation';
import styles from './login.module.scss';
import { LoginForm } from './_components/login-form';
import { LogoutNotice } from './_components/logout-notice';

// cookies()로 이미 동적이지만, 정적 프리렌더로 데이터가 빌드 산출물에 박히는 경로를
// 원천 차단하기 위해 명시적으로 강제한다.
export const dynamic = 'force-dynamic';

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

export default async function Page({ searchParams }: PageProps) {
  const admin = await getSessionAdmin();
  if (admin) {
    redirect('/');
  }

  const resolvedSearchParams = await searchParams;
  const logoutError = resolvedSearchParams[LOGOUT_ERROR_QUERY_PARAM];
  const showLogoutError = typeof logoutError === 'string' && logoutError.length > 0;
  const sessionRevoked = resolvedSearchParams[SESSION_REVOKED_QUERY_PARAM];
  const showSessionRevoked =
    typeof sessionRevoked === 'string' && sessionRevoked.length > 0;

  return (
    <div className={styles.page}>
      <LogoutNotice
        showError={showLogoutError}
        showSessionRevoked={showSessionRevoked}
      />
      <div className={styles.card}>
        <h1 className={styles.title}>관리자 로그인</h1>
        <LoginForm />
      </div>
    </div>
  );
}
