<?php

declare(strict_types=1);

namespace App\Support\Ui\EnterpriseDetail;

final readonly class SummaryHeaderData
{
    /**
     * @param  list<array{label: string, color?: string, icon?: ?string, iconColor?: ?string}>  $statusBadges
     * @param  list<array{label: string, value: string, hint?: ?string, badge?: ?array{label: string, color?: string, icon?: ?string, iconColor?: ?string}}>  $keyFacts
     * @param  list<PageActionData>  $primaryActions
     */
    public function __construct(
        public string $title,
        public ?string $subtitle = null,
        public array $statusBadges = [],
        public array $keyFacts = [],
        public array $primaryActions = [],
        public ?string $descriptionHint = null,
    ) {}

    /**
     * @return array{
     *     title: string,
     *     subtitle: ?string,
     *     statusBadges: list<array{label: string, color?: string, icon?: ?string, iconColor?: ?string}>,
     *     keyFacts: list<array{label: string, value: string, hint?: ?string, badge?: ?array{label: string, color?: string, icon?: ?string, iconColor?: ?string}}>,
     *     primaryActions: list<array{label: string, placement: string, url: ?string, actionName: ?string, destructive: bool, requiresConfirmation: bool, visible: bool, icon: ?string, openInNewTab: bool}>,
     *     descriptionHint: ?string
     * }
     */
    public function toArray(): array
    {
        return [
            'title' => $this->title,
            'subtitle' => $this->subtitle,
            'statusBadges' => array_values($this->statusBadges),
            'keyFacts' => array_values($this->keyFacts),
            'primaryActions' => array_values(array_map(
                static fn (PageActionData $action): array => $action->toArray(),
                array_values(array_filter(
                    $this->primaryActions,
                    static fn (PageActionData $action): bool => $action->isRenderable(),
                )),
            )),
            'descriptionHint' => $this->descriptionHint,
        ];
    }
}
