<?php

declare(strict_types=1);

namespace App\Framework\Core;

class PhpObjectExporter
{
    /**
     * Eigene Export-Funktion, die rekursiv ein PHP-Array mit echten Konstruktoraufrufen exportiert.
     * (Variante unten für Standardfälle ausreichend! Für verschachtelte/nicht-indizierte Arrays ggf. anpassen.)
     */
    public static function export(mixed $value): string
    {
        if (is_array($value)) {
            $exported = [];
            foreach ($value as $key => $v) {
                $exported[] = var_export($key, true) . ' => ' . self::export($v);
            }

            return '[' . implode(",\n", $exported) . ']';
        }
        if ($value instanceof StaticRoute) {
            return "new StaticRoute("
                . var_export($value->controller, true) . ', '
                . var_export($value->action, true) . ', '
                . self::export($value->parameters, true)
                . ")";
        }
        if ($value instanceof DynamicRoute) {
            return "new DynamicRoute("
                . var_export($value->regex, true) . ', '
                . self::export($value->parameters, true) . ', '
                . var_export($value->controller, true) . ', '
                . var_export($value->action, true) . ', '
                . var_export($value->parameters, true)
                . ")";
        }

        // Fallback für skalare Werte
        return var_export($value, true);
    }
}
