<?php
declare(strict_types=1);

/**
 * /functional/video/delete.php
 * Видалення відео:
 * - доступ тільки власнику
 * - ТІЛЬКИ POST + CSRF
 * - транзакційно: спочатку блокуємо рядок, видаляємо з БД, потім best-effort видаляємо файл
 * - безпека: шлях лише всередині /upload (mv_fs_is_safe) + legacy fallback
 * - SEO: сторінка персональна => noindex
 */

require_once __DIR__ . '/../../includes/start.php';

$pdo = db();
$me  = current_user();

require_once __DIR__ . '/_lib.php';

require_login();
mv_private_seo_headers();

if (!headers_sent()) {
  header('X-Content-Type-Options: nosniff', true);
}

$GLOBALS['mv_lang'] = mv_detect_lang($me);
$lang = (string)$GLOBALS['mv_lang'];

if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') {
  redirect('/functional/video/');
}

if (!csrf_check((string)($_POST['csrf'] ?? ''))) {
  flash_set('err', mv_t('err_csrf', $lang));
  redirect('/functional/video/');
}

$id = (int)($_POST['id'] ?? 0);
if ($id <= 0) {
  redirect('/functional/video/');
}

$userId = (int)($me['id'] ?? 0);
if ($userId <= 0) {
  redirect('/login.php');
}

try {
  $pdo->beginTransaction();

  // блокуємо рядок (щоб не було гонок при паралельному видаленні)
  $st = $pdo->prepare("SELECT id, user_id, rel_path FROM myvideos WHERE id=? AND user_id=? LIMIT 1 FOR UPDATE");
  $st->execute([$id, $userId]);
  $v = $st->fetch(PDO::FETCH_ASSOC);

  if (!$v) {
    $pdo->rollBack();
    flash_set('err', mv_t('not_found', $lang));
    redirect('/functional/video/');
  }

  $relPath = (string)($v['rel_path'] ?? '');

  $stDel = $pdo->prepare("DELETE FROM myvideos WHERE id=? AND user_id=? LIMIT 1");
  $stDel->execute([$id, $userId]);

  $pdo->commit();

  // best-effort: видаляємо файл після коміту
  if ($relPath !== '') {
    $fs = mv_rel_to_fs($relPath);
    if (is_file($fs) && mv_fs_is_safe($fs)) {
      @unlink($fs);
    }
  }

  flash_set('ok', mv_t('ok_deleted', $lang));
} catch (Throwable $e) {
  if ($pdo->inTransaction()) $pdo->rollBack();
  flash_set('err', mv_t('not_found', $lang));
}

redirect('/functional/video/');