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

$me = admin_find((int)($_SESSION['admin_id'] ?? 0));
if (!$me) { redirect('/admin/login.php'); }

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    require_post_csrf();
    $action = (string)($_POST['action'] ?? 'password');

    if ($action === 'email') {
        // メールアドレス（＝ログインID）の変更。乗っ取り・誤変更防止のため現在のパスワード確認を必須にする。
        $cur      = (string)($_POST['current'] ?? '');
        $newEmail = trim((string)($_POST['new_email'] ?? ''));
        if (!admin_verify((string)$me['email'], $cur)) {
            flash_set('現在のパスワードが違います。', 'err');
        } elseif (!filter_var($newEmail, FILTER_VALIDATE_EMAIL)) {
            flash_set('メールアドレスの形式が正しくありません。', 'err');
        } elseif (strcasecmp($newEmail, (string)$me['email']) === 0) {
            flash_set('現在のメールアドレスと同じです。', 'err');
        } elseif (admin_email_taken($newEmail, (int)$me['id'])) {
            flash_set('そのメールアドレスは既に使われています。', 'err');
        } else {
            admin_update_email((int)$me['id'], $newEmail);
            session_regenerate_id(true); // 念のため旧セッションを無効化
            flash_set('メールアドレスを変更しました。次回から新しいメールアドレスでログインしてください。');
        }
        redirect('/admin/account.php');
    }

    // パスワードの変更
    $cur  = (string)($_POST['current'] ?? '');
    $new  = (string)($_POST['new'] ?? '');
    $new2 = (string)($_POST['new2'] ?? '');

    if (!admin_verify((string)$me['email'], $cur)) {
        flash_set('現在のパスワードが違います。', 'err');
    } elseif (strlen($new) < 8) {
        flash_set('新しいパスワードは8文字以上にしてください。', 'err');
    } elseif ($new !== $new2) {
        flash_set('新しいパスワード（確認）が一致しません。', 'err');
    } elseif ($new === $cur) {
        flash_set('現在のパスワードと同じです。別のパスワードにしてください。', 'err');
    } else {
        admin_update_password((int)$me['id'], $new);
        session_regenerate_id(true); // 変更後は旧セッションを無効化
        flash_set('パスワードを変更しました。');
    }
    redirect('/admin/account.php');
}

admin_header('アカウント', 'account');
?>
<h1 class="adm-h1">アカウント</h1>
<?php flash_render(); ?>

<div class="adm-block">
  <div class="adm-block-head"><span class="adm-block-label">ログイン情報</span></div>
  <p class="adm-note">現在のメールアドレス：<strong><?= h((string)$me['email']) ?></strong></p>
</div>

<div class="adm-block">
  <div class="adm-block-head"><span class="adm-block-label">メールアドレスの変更</span></div>
  <div class="adm-note" style="margin:0 0 .8rem;line-height:1.7;">
    <strong>このメールアドレスは「ログインID」です。</strong>変更すると、<strong>次回から新しいメールアドレスでログイン</strong>することになります。<br>
    ・打ち間違いがあると<strong>ログインできなくなる</strong>ので、間違いがないか必ず確認してください。<br>
    ・本人確認のため、<strong>現在のパスワード</strong>の入力が必要です。<br>
    ・お問い合わせフォームの通知先は、各フォームの設定が優先されます。フォーム側で宛先を空にしている場合のみ、この変更後のアドレスに届くようになります。
  </div>
  <form method="post" class="adm-form adm-narrow" autocomplete="off"
        onsubmit="return confirm('メールアドレス（ログインID）を変更します。次回から新しいアドレスでログインします。よろしいですか？');">
    <input type="hidden" name="_csrf" value="<?= h(csrf_token()) ?>">
    <input type="hidden" name="action" value="email">
    <div class="fld"><label class="fld-label">新しいメールアドレス</label>
      <input type="email" name="new_email" required placeholder="例：you@example.com"></div>
    <div class="fld"><label class="fld-label">現在のパスワード（確認）</label>
      <input type="password" name="current" required></div>
    <button class="adm-btn primary" type="submit">メールアドレスを変更</button>
  </form>
</div>

<div class="adm-block">
  <div class="adm-block-head"><span class="adm-block-label">パスワードの変更</span></div>
  <form method="post" class="adm-form adm-narrow" autocomplete="off">
    <input type="hidden" name="_csrf" value="<?= h(csrf_token()) ?>">
    <input type="hidden" name="action" value="password">
    <div class="fld"><label class="fld-label">現在のパスワード</label>
      <input type="password" name="current" required></div>
    <div class="fld"><label class="fld-label">新しいパスワード（8文字以上）</label>
      <input type="password" name="new" required></div>
    <div class="fld"><label class="fld-label">新しいパスワード（確認）</label>
      <input type="password" name="new2" required></div>
    <button class="adm-btn primary" type="submit">パスワードを変更</button>
  </form>
</div>

<?php admin_footer(); ?>
