<?php
declare(strict_types=1);

/**
 * /functional/albums/cover_set.php
 * Встановлення обкладинки фотоальбому без видалення фото.
 *
 * POST:
 * - csrf
 * - album_id
 * - photo_id
 * - back (optional)
 *
 * Поведінка:
 * - перевіряє, що фото належить альбому
 * - записує photo_id в cover_photo_id
 * - оновлює updated_at, якщо така колонка є
 * - повертає назад на перегляд альбому
 */

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

if (!headers_sent()) {
    header('X-Robots-Tag: noindex, nofollow, noarchive, nosnippet', true);
    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0', true);
    header('Pragma: no-cache', true);
}

if (!function_exists('alb_cover_set_redirect')) {
    function alb_cover_set_redirect(string $url, int $code = 302): void
    {
        header('Location: ' . $url, true, $code);
        exit;
    }
}

if (!function_exists('alb_cover_set_require_login')) {
    function alb_cover_set_require_login(): void
    {
        if (function_exists('require_login')) {
            require_login();
            return;
        }

        $me = alb_me();
        if (!$me || (int)($me['id'] ?? 0) <= 0) {
            alb_cover_set_redirect('/login.php');
        }
    }
}

alb_cover_set_require_login();

$pdo = alb_db();
$me  = alb_me();

if (strtoupper((string)($_SERVER['REQUEST_METHOD'] ?? 'GET')) !== 'POST') {
    alb_cover_set_redirect('/profile/index.php?tab=albums');
}

if (!alb_ready($pdo)) {
    alb_cover_set_redirect('/profile/index.php?tab=albums&am=schema');
}

$albumId = (int)($_POST['album_id'] ?? 0);
$photoId = (int)($_POST['photo_id'] ?? 0);
if ($albumId <= 0 || $photoId <= 0) {
    alb_cover_set_redirect('/profile/index.php?tab=albums');
}

$album = alb_album_get($pdo, $albumId);
if (!$album) {
    alb_cover_set_redirect('/profile/index.php?tab=albums');
}

$owner = alb_user_get($pdo, (int)($album['user_id'] ?? 0));
$fallbackBack = $owner ? alb_album_url($album, $owner) : '/profile/index.php?tab=albums';
$back = alb_safe_back_url((string)($_POST['back'] ?? ''), $fallbackBack);

if (!alb_csrf_check((string)($_POST['csrf'] ?? ''))) {
    alb_cover_set_redirect(alb_append_query($back, ['am' => 'csrf']));
}

if (!alb_can_manage_album($album, $me)) {
    alb_cover_set_redirect(alb_append_query($back, ['am' => 'denied']));
}

if (!alb_set_album_cover($pdo, $albumId, $photoId)) {
    alb_cover_set_redirect(alb_append_query($back, ['am' => 'cover_invalid']));
}

alb_cover_set_redirect(alb_append_query($back, ['am' => 'cover_set']));
