<?php
declare(strict_types=1);

namespace PSLauncher\Routes;

use PSLauncher\Response;

/**
 * Release notes endpoint. Accepte deux formats d'identifiant :
 *   - id stable d'entrée : 'v' + 8 hex chars (format depuis v0.27.1, supporte
 *     plusieurs entries de même version)
 *   - numéro de version legacy : X.Y.Z (compat ascendante avec les notes
 *     créées avant v0.27.1)
 */
final class Releasenotes
{
    public static function handle(string $key): void
    {
        $isEntryId = (bool)preg_match('/^v[0-9a-f]{8}$/', $key);
        $isVersion = (bool)preg_match('/^[0-9]+\.[0-9]+\.[0-9]+$/', $key);

        if (!$isEntryId && !$isVersion) {
            Response::error('invalid_id', 'Bad release-notes identifier', 400);
        }

        $file = dirname(__DIR__, 2) . "/releasenotes/{$key}.md";
        if (!is_file($file)) {
            Response::error('not_found', "Release notes for {$key} not found", 404);
        }
        header('Cache-Control: public, max-age=3600, must-revalidate');
        header('Content-Type: text/markdown; charset=utf-8');
        header('Content-Length: ' . filesize($file));
        readfile($file);
    }
}
