<?php

namespace App\Service;

/**
 * Validation et nettoyage des entrées image / fichiers.
 * Port des fonctions serveur de lib/validators.ts.
 */
final class ImageValidator
{
    private const MAX_FILE_SIZE_BYTES = 15 * 1024 * 1024; // 15 Mo

    /**
     * Valide une image base64 (avec ou sans préfixe data URL) et sa taille décodée.
     */
    public function isValidBase64(string $str): bool
    {
        $clean = preg_replace('/^data:[^;]+;base64,/', '', $str) ?? $str;

        if (1 !== preg_match('#^[A-Za-z0-9+/=]+$#', $clean)) {
            return false;
        }

        $decoded = base64_decode($clean, true);
        if (false === $decoded) {
            return false;
        }

        return strlen($decoded) <= self::MAX_FILE_SIZE_BYTES;
    }

    public function sanitizeFilename(string $filename): string
    {
        $sanitized = preg_replace('#[/\\\\:*?"<>|]#', '_', $filename) ?? $filename;
        $sanitized = str_replace('..', '_', $sanitized);

        return mb_substr($sanitized, 0, 255);
    }
}
