twig = $twig;
    }
    public function getFunctions()
    {
        return [
            new TwigFunction('RandomUUID',              [$this, 'RandomUUID'],              ['is_safe' => ['html']]),
            new TwigFunction('BuildForms',              [$this, 'BuildForms'],              ['is_safe' => ['html']]),
            new TwigFunction('BuildModifiableField',    [$this, 'BuildModifiableField'],    ['is_safe' => ['html']]),
            new TwigFunction('BuildEnumField',          [$this, 'BuildEnumField'],          ['is_safe' => ['html']]),
            new TwigFunction('GetLFSFileURL',           [$this, 'GetLFSFileURL'],           ['is_safe' => ['html']]),
            new TwigFunction('GetConfigurationItem',    [$this, 'GetConfigurationItem'],    ['is_safe' => ['html']]),
            new TwigFunction('ParseForUserToken',       [$this, 'ParseForUserToken'],       ['is_safe' => ['html']]),
        ];
    }
    public function RandomUUID(): string
    {
        return Uuid::uuid4()->toString();
    }
    public function BuildForms(...$formDefinitions): string
    {
        $output = '
';
        foreach ($formDefinitions as $formDefinition)
        {
            $output .= twig_include($this->twig, [], '/Partials/Form.html.twig', ['FormDefinition' => $formDefinition]);
        }
        return "$output
";
    }
    public function BuildModifiableField(string $apiBase, string $id, string $value): string
    {
        $output = twig_include($this->twig, [], '/Partials/ModifiableField.html.twig', ['FieldData' => [
            "APIBase"=>$apiBase,
            "ID"=>$id,
            "Value"=>$value,
        ]]);
        return "$output";
    }
    public function BuildEnumField(string $apiBase, string $id, string $value, string $enumName): string
    {
        $enumData = APIWrapper::Get("/Enumerators/$enumName")->Payload["Cases"];
        foreach($enumData as $case)
        {
            if($case["Value"] == $value)
            {
                $currentEnum = $case;
            }
        }
        $output = twig_include($this->twig, [], '/Partials/EnumField.html.twig', ['FieldData' => [
            "APIBase"=>$apiBase,
            "ID"=>$id,
            "Value"=>$value,
            "EnumName"=>$enumName,
            "CurrentEnum"=>$currentEnum,
            "EnumData"=>$enumData,
        ]]);
        return "$output";
    }
    public function GetConfigurationItem(string...$nav): string
    {
        return Configuration::GetConfig(...$nav);
    }
    public function GetLFSFileURL(string $fileID): string
    {
        return LFSWrapper::GetFileURLByID($fileID);
    }
    public function ParseForUserToken(string $input) : string
    {
        $modes = implode(separator: "|", array:[
            "USER",
            "VEHICLE",
        ]);
        $uuidRegex = "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}";
        $fullRegex = "/@({$modes}).{$uuidRegex}.{$uuidRegex}/";
        preg_match_all($fullRegex, $input, $matches);
        foreach($matches[0] as $match)
        {
            $parts = explode(".", $match);
            $mode = substr(string: $parts[0], offset: 1);
            $tenantID = $parts[1];
            $objectID = $parts[2];
            switch ($mode)
            {
                case "USER":
                    $temp = twig_include($this->twig, [], '/Partials/UserButton.html.twig', [
                        '_tenantID' => $tenantID,
                        '_userID' => $objectID,
                    ]);
                    break;
                case "VEHICLE":
                    break;
            }
            $input = str_replace($match, $temp, $input);
        }
        return $input;
    }
}