<?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 === 'purge') {
        $sel = $_POST['files'] ?? [];
        $sel = is_array($sel) ? array_map('strval', $sel) : [];
        // 念のため basename だけにし、cms_cleanup_files_if_unused 側で「ユーザーアップ＆未参照」を再チェック
        $sel = array_map(fn($f) => basename($f), $sel);
        $n = cms_cleanup_files_if_unused($sel);
        flash_set($n > 0 ? ($n . '件の未使用ファイルを削除しました。') : '削除対象がありませんでした。');
        redirect('/admin/uploads.php');
    }
}

/** バイト数を読みやすく */
function uploads_hsize(int $b): string {
    if ($b >= 1048576) return number_format($b / 1048576, 1) . ' MB';
    if ($b >= 1024)    return number_format($b / 1024, 0) . ' KB';
    return $b . ' B';
}

$orphans = cms_orphan_uploads();
$totalSize = array_sum(array_column($orphans, 'size'));

admin_header('未使用ファイルの掃除', 'uploads');
?>
<h1 class="adm-h1">未使用ファイルの掃除</h1>
<?php flash_render(); ?>

<p class="adm-note" style="line-height:1.8;">
  ページやパーツ、一覧データなどを削除した時に、どこからも使われなくなった画像・動画ファイルがここに表示されます。<br>
  ・<strong>サイトで使用中のファイルや、CMS同梱の見本画像は表示されません</strong>（自動で除外しているので、ここにあるものは消して安全です）。<br>
  ・サーバーとパソコンでフォルダの中身がズレた時などにも溜まることがあります。気づいた時に掃除すればOKです。
</p>

<?php if (!$orphans): ?>
  <div class="adm-block"><p class="adm-note" style="margin:0;">未使用のファイルはありません。きれいです！ ✨</p></div>
<?php else: ?>
  <form method="post" onsubmit="return confirm('選択した未使用ファイルを削除します。元に戻せません。よろしいですか？');">
    <input type="hidden" name="_csrf" value="<?= h(csrf_token()) ?>">
    <input type="hidden" name="action" value="purge">

    <div class="adm-toolbar" style="display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin:.6rem 0 1rem;">
      <label class="fld-check" style="margin:0;"><input type="checkbox" id="up-all"> すべて選択</label>
      <span class="adm-note" style="margin:0;">未使用：<strong><?= count($orphans) ?></strong> 件（合計 <?= h(uploads_hsize((int)$totalSize)) ?>）</span>
      <button class="adm-btn danger" type="submit">選択したファイルを削除</button>
    </div>

    <div class="up-grid">
      <?php foreach ($orphans as $o): $nm = $o['name']; ?>
        <label class="up-card">
          <input type="checkbox" name="files[]" value="<?= h($nm) ?>" class="up-cb">
          <span class="up-thumb">
            <?php if ($o['is_video']): ?>
              <video src="<?= h(upload_url($nm)) ?>" muted preload="metadata"></video>
              <span class="up-badge">動画</span>
            <?php else: ?>
              <img src="<?= h(upload_url($nm)) ?>" alt="" loading="lazy">
            <?php endif; ?>
          </span>
          <span class="up-meta">
            <span class="up-name"><?= h($nm) ?></span>
            <span class="up-sub"><?= h(uploads_hsize((int)$o['size'])) ?> ・ <?= h(date('Y/m/d', (int)$o['mtime'])) ?></span>
          </span>
        </label>
      <?php endforeach; ?>
    </div>

    <div style="margin-top:1.2rem;">
      <button class="adm-btn danger" type="submit">選択したファイルを削除</button>
    </div>
  </form>

  <style>
    .up-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.8rem;}
    .up-card{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--adm-border);border-radius:10px;padding:.5rem;cursor:pointer;background:#fff;}
    .up-card:has(.up-cb:checked){outline:2px solid var(--adm-primary,#2563eb);outline-offset:1px;background:#eef4ff;}
    .up-card .up-cb{align-self:flex-start;}
    .up-thumb{position:relative;display:block;aspect-ratio:4/3;background:#f1f5f9;border-radius:6px;overflow:hidden;}
    .up-thumb img,.up-thumb video{width:100%;height:100%;object-fit:cover;display:block;}
    .up-badge{position:absolute;left:.3rem;bottom:.3rem;background:rgba(0,0,0,.65);color:#fff;font-size:.7rem;padding:.05rem .4rem;border-radius:4px;}
    .up-meta{display:flex;flex-direction:column;min-width:0;}
    .up-name{font-size:.78rem;word-break:break-all;color:var(--adm-text);}
    .up-sub{font-size:.74rem;color:var(--adm-muted);}
  </style>
  <script>
    (function(){
      var all=document.getElementById('up-all');
      if(!all) return;
      all.addEventListener('change',function(){
        document.querySelectorAll('.up-cb').forEach(function(c){c.checked=all.checked;});
      });
    })();
  </script>
<?php endif; ?>

<?php admin_footer(); ?>
