<?php

declare(strict_types=1);

namespace App\Application\Admin\ValueObjects;

final readonly class NavigationSection
{
    /** @param array<NavigationItem> $items */
    public function __construct(
        public string $name,
        public array $items,
        public ?string $icon = null
    ) {
    }

    public static function fromArray(array $data): self
    {
        $items = [];
        foreach ($data['items'] ?? [] as $itemData) {
            $items[] = NavigationItem::fromArray($itemData);
        }

        return new self(
            name: $data['section'] ?? $data['name'] ?? '',
            items: $items,
            icon: $data['icon'] ?? null
        );
    }

    public function toArray(): array
    {
        return [
            'section' => $this->name,
            'name' => $this->name,
            'items' => array_map(
                fn (NavigationItem $item) => $item->toArray(),
                $this->items
            ),
            'icon' => $this->icon,
        ];
    }

    public function addItem(NavigationItem $item): self
    {
        return new self(
            name: $this->name,
            items: [...$this->items, $item],
            icon: $this->icon
        );
    }

    public function hasActiveItem(string $currentPath): bool
    {
        foreach ($this->items as $item) {
            if ($item->isActive($currentPath)) {
                return true;
            }
        }

        return false;
    }
}
