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

// 新規ページ追加 / 削除
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    require_post_csrf();
    $action = (string)($_POST['action'] ?? '');

    if ($action === 'add_page') {
        $title = trim((string)($_POST['title'] ?? ''));
        $slug  = strtolower(trim((string)($_POST['slug'] ?? '')));
        $slug  = preg_replace('/[^a-z0-9_\-]/', '', $slug);
        if ($title === '' || $slug === '') {
            flash_set('ページ名とスラッグを入力してください。', 'err');
        } elseif (page_find($slug)) {
            flash_set('そのスラッグは既に使われています。', 'err');
        } else {
            $maxSort = (int)db()->query("SELECT COALESCE(MAX(sort),0) FROM pages")->fetchColumn();
            $st = db()->prepare("INSERT INTO pages(slug,title,sort,in_nav) VALUES(?,?,?,1)");
            $st->execute([$slug, $title, $maxSort + 1]);
            flash_set('ページ「' . $title . '」を追加しました。編集してください。');
            redirect('/admin/page_edit.php?id=' . (int)db()->lastInsertId());
        }
    } elseif ($action === 'toggle_status') {
        $id = (int)($_POST['id'] ?? 0);
        $p = db()->prepare("SELECT slug, status FROM pages WHERE id = ?");
        $p->execute([$id]);
        $row = $p->fetch();
        if ($row && $row['slug'] !== 'home') {
            $new = (($row['status'] ?? 'public') === 'draft') ? 'public' : 'draft';
            db()->prepare("UPDATE pages SET status=?, updated_at=datetime('now') WHERE id=?")->execute([$new, $id]);
            flash_set($new === 'draft' ? 'ページを「非公開」にしました。' : 'ページを「公開」にしました。');
        }
        redirect('/admin/index.php#pages');
    } elseif ($action === 'delete_page') {
        $id = (int)($_POST['id'] ?? 0);
        $p = db()->prepare("SELECT slug FROM pages WHERE id = ?");
        $p->execute([$id]);
        $slug = $p->fetchColumn();
        if ($slug === 'home') {
            flash_set('ホームは削除できません。', 'err');
        } elseif ($slug !== false) {
            // 削除前に、このページの全ブロックが使う画像/動画ファイル名を集める（ページ削除でブロックは連鎖削除される）
            $files = [];
            $stB = db()->prepare("SELECT data FROM blocks WHERE page_id = ?");
            $stB->execute([$id]);
            foreach ($stB->fetchAll(PDO::FETCH_COLUMN) as $d) {
                $files = array_merge($files, cms_extract_upload_names((string)$d));
            }
            db()->prepare("DELETE FROM pages WHERE id = ?")->execute([$id]);
            cms_cleanup_files_if_unused($files); // 未参照になった画像だけ物理削除
            flash_set('ページを削除しました。');
        }
    }
    redirect('/admin/index.php#pages');
}

$pages = page_all();
$frameMeta = frame_all()[active_frame_key()] ?? ['name' => active_frame_key()];

admin_header('ダッシュボード', 'index');
?>
<h1 class="adm-h1">ダッシュボード</h1>
<?php flash_render(); ?>

<p class="adm-welcome"><?= h(current_admin_name()) ?> さん、こんにちは。</p>

<section class="adm-cards">
  <a class="adm-card" href="<?= h(url('/admin/design.php')) ?>">
    <span class="adm-card-label">現在のフレーム</span>
    <strong class="adm-card-value"><?= h($frameMeta['name']) ?></strong>
    <span class="adm-card-act">デザインを変更 →</span>
  </a>
  <a class="adm-card" href="<?= h(url('/admin/settings.php')) ?>">
    <span class="adm-card-label">サイト名</span>
    <strong class="adm-card-value"><?= h(setting_get('site_name', '未設定')) ?></strong>
    <span class="adm-card-act">基本設定 →</span>
  </a>
</section>

<section id="pages" class="adm-section">
  <h2 class="adm-h2">ページ編集</h2>
  <p class="adm-note">各ページの中身（パーツ）を編集できます。<strong>作ったページをナビ（メニュー）に並べるには、<a href="<?= h(url('/admin/menu.php')) ?>">メニュー（ナビ）</a>から設定してください。</strong>ページを追加しただけでは、自動ではメニューに表示されません。</p>
  <ul class="adm-pagelist">
    <?php foreach ($pages as $p): ?>
      <li>
        <a class="pg-edit" href="<?= h(url('/admin/page_edit.php?id=' . (int)$p['id'])) ?>">
          <span class="pg-title"><?= h($p['title']) ?></span>
          <span class="pg-slug">/<?= h($p['slug'] === 'home' ? '' : '?p=' . $p['slug']) ?></span>
        </a>
        <span class="pg-actions">
          <?php if ($p['slug'] !== 'home'): $isDraft = (($p['status'] ?? 'public') === 'draft'); ?>
          <form method="post" style="display:inline">
            <input type="hidden" name="_csrf" value="<?= h(csrf_token()) ?>">
            <input type="hidden" name="action" value="toggle_status">
            <input type="hidden" name="id" value="<?= (int)$p['id'] ?>">
            <button class="pg-status <?= $isDraft ? 'is-draft' : 'is-public' ?>" type="submit" title="クリックで公開／非公開を切り替え"><?= $isDraft ? '非公開' : '公開' ?></button>
          </form>
          <?php endif; ?>
          <a class="adm-btn ghost sm" href="<?= h(page_url($p['slug'])) ?>" target="_blank" rel="noopener">表示 ↗</a>
          <?php if ($p['slug'] !== 'home'): ?>
          <form method="post" onsubmit="return confirm('このページを削除しますか？');" style="display:inline">
            <input type="hidden" name="_csrf" value="<?= h(csrf_token()) ?>">
            <input type="hidden" name="action" value="delete_page">
            <input type="hidden" name="id" value="<?= (int)$p['id'] ?>">
            <button class="adm-btn danger sm" type="submit">削除</button>
          </form>
          <?php endif; ?>
        </span>
        <?php // 非公開の行だけ、その行の中に案内を出す（どのページの話か迷わせないため）
          if ((string)($p['status'] ?? 'public') === 'draft') echo adm_hidden_note();
        ?>
      </li>
    <?php endforeach; ?>
  </ul>

  <details class="adm-add adm-add-page">
    <summary class="adm-add-btn">＋ 新しいページを追加</summary>
    <form method="post" class="adm-inline-form">
      <input type="hidden" name="_csrf" value="<?= h(csrf_token()) ?>">
      <input type="hidden" name="action" value="add_page">
      <label>ページ名 <input type="text" name="title" placeholder="例：会社概要" required></label>
      <label>スラッグ <input type="text" name="slug" placeholder="例：company（半角英数）" required></label>
      <button class="adm-btn primary" type="submit">追加</button>
    </form>
  </details>
</section>

<?php admin_footer(); ?>
