<?php
declare(strict_types=1);

/**
 * /functional/albums/update.php
 * Оновлення налаштувань фотоальбому.
 *
 * POST:
 * - csrf
 * - album_id
 * - title
 * - description
 * - privacy
 * - back (optional)
 *
 * Поведінка:
 * - змінює назву, опис і приватність альбому
 * - оновлює 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_update_redirect')) {
    function alb_update_redirect(string $url, int $code = 302): void
    {
        header('Location: ' . $url, true, $code);
        exit;
    }
}

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

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

alb_update_require_login();

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

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

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

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

$album = alb_album_get($pdo, $albumId);
if (!$album) {
    alb_update_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_update_redirect(alb_append_query($back, ['am' => 'csrf']));
}

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

$title = alb_clean_title((string)($_POST['title'] ?? ''));
$description = alb_clean_description((string)($_POST['description'] ?? ''));
$privacy = alb_privacy_normalize((string)($_POST['privacy'] ?? 'public'));

if ($title === '') {
    alb_update_redirect(alb_append_query($back, ['am' => 'title_required']));
}

if (!alb_update_album($pdo, $albumId, $title, $description, $privacy)) {
    alb_update_redirect(alb_append_query($back, ['am' => 'db']));
}

alb_update_redirect(alb_append_query($back, ['am' => 'updated']));
