<?php

declare(strict_types=1);

namespace App\Framework\Admin\FormFields\ValueObjects;

/**
 * Field Options Value Object
 *
 * Holds options for select/radio/checkbox fields
 */
final readonly class FieldOptions
{
    /**
     * @param array<string, string> $options Key-value pairs for options
     * @param string|null $placeholder Optional placeholder option
     */
    public function __construct(
        public array $options,
        public ?string $placeholder = null
    ) {
    }

    /**
     * Convert options to HTML option elements
     */
    public function toHtml(string $selectedValue = ''): string
    {
        $html = '';

        if ($this->placeholder !== null) {
            $html .= '<option value="">' . htmlspecialchars($this->placeholder) . '</option>';
        }

        foreach ($this->options as $value => $label) {
            $selected = ((string) $value === $selectedValue) ? ' selected' : '';
            $html .= sprintf(
                '<option value="%s"%s>%s</option>',
                htmlspecialchars((string) $value),
                $selected,
                htmlspecialchars($label)
            );
        }

        return $html;
    }

    /**
     * Get options as array
     *
     * @return array<string, string>
     */
    public function toArray(): array
    {
        return $this->options;
    }
}
