<?php

declare(strict_types=1);

namespace App\Support\Ui\EnterpriseDetail;

final readonly class TechnicalDetailData
{
    /**
     * @param  list<array<string, mixed>>  $entries
     * @param  array{title: string, description?: ?string, icon?: ?string}|null  $emptyState
     * @param  array<string, mixed>  $viewData
     */
    public function __construct(
        public string $title,
        public array $entries = [],
        public bool $collapsible = true,
        public bool $collapsed = true,
        public bool $visible = true,
        public ?string $description = null,
        public ?string $view = null,
        public array $viewData = [],
        public ?array $emptyState = null,
        public string $variant = 'technical',
    ) {}

    public function shouldRender(): bool
    {
        if (! $this->visible || trim($this->title) === '') {
            return false;
        }

        return $this->entries !== []
            || $this->view !== null
            || $this->emptyState !== null;
    }

    /**
     * @return array{
     *     title: string,
     *     entries: list<array<string, mixed>>,
     *     collapsible: bool,
     *     collapsed: bool,
     *     visible: bool,
     *     description: ?string,
     *     view: ?string,
     *     viewData: array<string, mixed>,
     *     emptyState: array{title: string, description?: ?string, icon?: ?string}|null
     * }
     */
    public function toArray(): array
    {
        return [
            'title' => $this->title,
            'entries' => array_values($this->entries),
            'collapsible' => $this->collapsible,
            'collapsed' => $this->collapsed,
            'visible' => $this->visible,
            'description' => $this->description,
            'view' => $this->view,
            'viewData' => $this->viewData,
            'emptyState' => $this->emptyState,
            'variant' => $this->variant,
        ];
    }
}
