<?php

namespace App\Framework\View\Processors;

use App\Framework\View\DomProcessor;
use App\Framework\View\DomWrapper;
use App\Framework\View\RenderContext;

final readonly class IfProcessor implements DomProcessor
{
    public function process(DomWrapper $dom, RenderContext $context): DomWrapper
    {
        $dom->getELementsByAttribute('if')->forEach(function ($node) use ($context) {
            $condition = $node->getAttribute('if');

            $value = $context->data[$condition] ?? null;

            // Entferne, wenn die Bedingung nicht erfüllt ist
            if (!$this->isTruthy($value)) {
                $node->parentNode?->removeChild($node);
            } else {
                // Entferne Attribut bei Erfolg
                $node->removeAttribute('if');
            }
        });



        /*foreach ($dom->querySelectorAll('*[if]') as $node) {
            $condition = $node->getAttribute('if');

            $value = $context->data[$condition] ?? null;

            // Entferne, wenn die Bedingung nicht erfüllt ist
            if (!$this->isTruthy($value)) {
                $node->parentNode?->removeChild($node);
                continue;
            }

            // Entferne Attribut bei Erfolg
            $node->removeAttribute('if');
        }*/

        return $dom;
    }

    private function isTruthy(mixed $value): bool
    {
        if (is_bool($value)) return $value;
        if (is_null($value)) return false;
        if (is_string($value)) return trim($value) !== '';
        if (is_numeric($value)) return $value != 0;
        if (is_array($value)) return count($value) > 0;

        return true;
    }
}
