<?php
declare(strict_types=1);
require_once __DIR__ . '/_bootstrap.php';

// 既にログイン済みならダッシュボードへ
if (!empty($_SESSION['admin_id'])) redirect('/admin/index.php');

$isSetup = !admin_exists();   // 管理者が未作成なら初回セットアップモード
$error = '';
if (!empty($_GET['timeout'])) {
    $error = '一定時間操作がなかったため、自動的にログアウトしました。お手数ですが再度ログインしてください。';
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    require_post_csrf();

    if ($isSetup) {
        // --- 初回：管理者アカウント作成 ---
        $email = trim((string)($_POST['email'] ?? ''));
        $pw    = (string)($_POST['password'] ?? '');
        $pw2   = (string)($_POST['password2'] ?? '');
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $error = 'メールアドレスの形式が正しくありません。';
        } elseif (strlen($pw) < 8) {
            $error = 'パスワードは8文字以上にしてください。';
        } elseif ($pw !== $pw2) {
            $error = 'パスワード（確認）が一致しません。';
        } else {
            admin_create($email, $pw, '管理者');
            $admin = admin_verify($email, $pw);
            if ($admin) {
                session_regenerate_id(true);
                $_SESSION['admin_id']   = (int)$admin['id'];
                $_SESSION['admin_name'] = (string)$admin['name'];
                redirect('/admin/index.php');
            }
        }
    } else {
        // --- 通常ログイン（総当たり対策つき） ---
        $ip    = (string)($_SERVER['REMOTE_ADDR'] ?? '');
        $email = trim((string)($_POST['email'] ?? ''));
        $pw    = (string)($_POST['password'] ?? '');
        if (login_attempts_count($ip, 10) >= 8) {
            $error = 'ログインの失敗が続いたため、しばらくロックされています。10分ほど待ってから、もう一度お試しください。';
        } else {
            $admin = admin_verify($email, $pw);
            if ($admin) {
                login_attempts_clear($ip);
                session_regenerate_id(true);
                $_SESSION['admin_id']   = (int)$admin['id'];
                $_SESSION['admin_name'] = (string)$admin['name'];
                redirect('/admin/index.php');
            }
            login_attempt_record($ip);
            usleep(400000); // 0.4秒の遅延で総当たりを鈍らせる
            $error = 'メールアドレスまたはパスワードが違います。';
        }
    }
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= $isSetup ? '初回セットアップ' : 'ログイン' ?> | Frames CMS</title>
<link rel="stylesheet" href="<?= h(url('/admin/assets/admin.css')) ?>">
</head>
<body class="adm-login-page">
<div class="adm-login">
  <h1 class="adm-login-ttl"><?= $isSetup ? 'はじめての設定' : '管理画面ログイン' ?></h1>
  <?php if ($isSetup): ?>
    <p class="adm-login-lead">最初に管理者アカウントを作成します。このメールとパスワードで今後ログインします。</p>
  <?php endif; ?>
  <?php if ($error !== ''): ?><div class="adm-flash err"><?= h($error) ?></div><?php endif; ?>
  <form method="post" autocomplete="off">
    <input type="hidden" name="_csrf" value="<?= h(csrf_token()) ?>">
    <label>メールアドレス
      <input type="email" name="email" required value="<?= h($_POST['email'] ?? '') ?>">
    </label>
    <label>パスワード<?php if ($isSetup): ?>（8文字以上）<?php endif; ?>
      <input type="password" name="password" required>
    </label>
    <?php if ($isSetup): ?>
    <label>パスワード（確認）
      <input type="password" name="password2" required>
    </label>
    <?php endif; ?>
    <button type="submit" class="adm-btn primary block"><?= $isSetup ? 'アカウントを作成して開始' : 'ログイン' ?></button>
  </form>
</div>
</body>
</html>
