<?php
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
 *
 * This file is part of a Moko Consulting project.
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 * # FILE INFORMATION
 * DEFGROUP: Joomla.Template.Site
 * INGROUP: MokoOnyx
 * PATH: scripts/download-google-fonts.php
 * VERSION: 03.09.03
 * BRIEF: Download Google Fonts (woff2) for local self-hosting
 */

$fontsDir = __DIR__ . '/../src/media/fonts';

if (!is_dir($fontsDir)) {
    fwrite(STDERR, "Error: Fonts directory not found: {$fontsDir}\n");
    exit(1);
}

$fonts = [
    'Roboto'    => 'https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;700&display=swap',
    'Noto Sans' => 'https://fonts.googleapis.com/css2?family=Noto+Sans:wght@100;300;400;700&display=swap',
    'Fira Sans' => 'https://fonts.googleapis.com/css2?family=Fira+Sans:wght@100;300;400;700&display=swap',
];

$userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';

echo "Google Fonts Downloader for MokoOnyx\n";
echo str_repeat('=', 48) . "\n";
echo "Target: {$fontsDir}\n\n";

foreach ($fonts as $name => $url) {
    echo "Downloading {$name}...\n";

    $ctx = stream_context_create(['http' => ['header' => "User-Agent: {$userAgent}\r\n"]]);
    $css = @file_get_contents($url, false, $ctx);

    if ($css === false) {
        fwrite(STDERR, "  FAIL: could not fetch CSS for {$name}\n");
        continue;
    }

    preg_match_all('#https://fonts\.gstatic\.com[^)]*\.woff2#', $css, $matches);

    if (empty($matches[0])) {
        fwrite(STDERR, "  FAIL: no woff2 URLs found for {$name}\n");
        continue;
    }

    $count = 0;
    foreach ($matches[0] as $fontUrl) {
        $filename = basename($fontUrl);
        $dest     = $fontsDir . '/' . $filename;

        $data = @file_get_contents($fontUrl, false, $ctx);
        if ($data === false) {
            fwrite(STDERR, "  FAIL: {$filename}\n");
            continue;
        }

        file_put_contents($dest, $data);
        $size = round(strlen($data) / 1024, 1);
        echo "  OK: {$filename} ({$size} KB)\n";
        $count++;
    }

    echo "  {$count} file(s) downloaded\n\n";
}

echo "Done.\n";
