<?php
// /scripts/pdf/pdf_renderer.php
declare(strict_types=1);

/**
 * Рендер PDF з HTML-URL.
 * 1) Перший варіант: wkhtmltopdf (якщо доступний)
 * 2) Фолбек: Dompdf (includes/dompdf)
 *
 * @param string      $url        Публічний URL сторінки з розкладом (HTML)
 * @param string      $outputPath Абсолютний шлях, куди зберегти PDF
 * @param string|null $wkhtmlPath Повний шлях до wkhtmltopdf або null, щоб пропустити
 * @return bool true якщо файл створено і >0 байт
 */
function renderSchedulePdfFromUrl(string $url, string $outputPath, ?string $wkhtmlPath = '/usr/bin/wkhtmltopdf'): bool
{
    // 0) Готуємо директорію
    $dir = dirname($outputPath);
    if (!is_dir($dir)) {
        @mkdir($dir, 0777, true);
    }
    if (!is_dir($dir)) {
        error_log("PDF: не вдалось створити директорію: {$dir}");
        return false;
    }

    // 1) wkhtmltopdf — найкраща якість верстки
    $candidates = [];
    if ($wkhtmlPath) $candidates[] = $wkhtmlPath;
    // типові місця встановлення
    $candidates = array_merge($candidates, [
        '/usr/local/bin/wkhtmltopdf',
        '/usr/bin/wkhtmltopdf',
        '/snap/bin/wkhtmltopdf',
    ]);

    foreach ($candidates as $bin) {
        if ($bin && @is_executable($bin)) {
            $cmd = escapeshellcmd($bin)
                 . ' -q --margin-top 10 --margin-bottom 12 --margin-left 8 --margin-right 8'
                 . ' --encoding utf-8 --enable-local-file-access --javascript-delay 1200 '
                 . escapeshellarg($url) . ' ' . escapeshellarg($outputPath) . ' 2>&1';
            $out = shell_exec($cmd);
            $ok = is_file($outputPath) && filesize($outputPath) > 0;
            if (!$ok) {
                error_log("wkhtmltopdf failed. Bin: {$bin}; Output: " . ($out ?? ''));
            }
            if ($ok) return true;
        }
    }

    // 2) Фолбек — Dompdf (без exec)
    $html = @file_get_contents($url);
    if ($html === false || trim($html) === '') {
        error_log("PDF: не вдалось завантажити HTML з {$url}");
        return false;
    }

    $autoload = __DIR__ . '/../../includes/dompdf/autoload.inc.php';
    if (!is_file($autoload)) {
        error_log("PDF: не знайдено Dompdf autoload: {$autoload}");
        return false;
    }

    require_once $autoload;

    try {
        $options = new Dompdf\Options();
        $options->set('isRemoteEnabled', true);
        $options->set('defaultFont', 'DejaVu Sans');

        $dompdf = new Dompdf\Dompdf($options);
        $dompdf->loadHtml($html, 'UTF-8');
        $dompdf->setPaper('A4', 'portrait');
        $dompdf->render();

        $pdf = $dompdf->output();
        if (@file_put_contents($outputPath, $pdf) === false) {
            error_log("PDF: не вдалось записати файл {$outputPath}");
            return false;
        }
        return (filesize($outputPath) > 0);
    } catch (Throwable $e) {
        error_log("PDF Dompdf error: " . $e->getMessage());
        return false;
    }
}
