<?php
/**
 * Select field partial.
 *
 * Variables consumed:
 *   string  $name         — select name attribute (also used for id)
 *   string  $label        — visible label text
 *   array   $options      — each element must have 'id' and 'name' keys;
 *                           may optionally have 'code' for display suffix
 *   mixed   $selected     — currently selected value (compared to option 'id');
 *                           pass null or '' for no selection
 *   bool    $required     — whether the field is required; default false
 *   string  $placeholder  — text for the leading empty <option>; default ''
 *                           set to null to suppress the empty option entirely
 *   string|null $id       — override the id attribute (defaults to $name)
 *   string|null $hint     — optional hint shown in <small> below the select
 */

$required    = $required    ?? false;
$placeholder = array_key_exists('placeholder', get_defined_vars()) ? $placeholder : '';
$id          = $id          ?? $name;
$hint        = $hint        ?? null;
$attrs       = $attrs       ?? [];
?>
<div>
    <label for="<?= htmlspecialchars($id) ?>"><?= htmlspecialchars($label) ?><?= $required ? ' <span class="asterisk">*</span>' : '' ?></label>
<?php
$selectAttrStr = '';
foreach ($attrs as $k => $v) {
    if ($v === true) {
        $selectAttrStr .= ' ' . htmlspecialchars($k);
    } else {
        $selectAttrStr .= ' ' . htmlspecialchars($k) . '="' . htmlspecialchars((string)$v) . '"';
    }
}
?>
    <select id="<?= htmlspecialchars($id) ?>"
            name="<?= htmlspecialchars($name) ?>"
            <?= $required ? 'required' : '' ?>
            <?= $selectAttrStr ?>>
        <?php if ($placeholder !== null): ?>
        <option value=""><?= htmlspecialchars($placeholder) ?></option>
        <?php endif; ?>
        <?php foreach ($options as $opt): ?>
        <?php
            // Match by id (numeric FK) or by name string (when the view returns the name).
            $isSelected = ((string)$selected === (string)$opt['id'])
                       || ($selected !== null && $selected !== '' && isset($opt['name']) && (string)$selected === (string)$opt['name']);
        ?>
        <option value="<?= htmlspecialchars((string)$opt['id']) ?>"
            <?= $isSelected ? 'selected' : '' ?>>
            <?= htmlspecialchars($opt['name']) ?><?php if (!empty($opt['code'])): ?> (<?= htmlspecialchars($opt['code']) ?>)<?php endif; ?>
        </option>
        <?php endforeach; ?>
    </select>
    <?php if ($hint): ?>
    <small><?= htmlspecialchars($hint) ?></small>
    <?php endif; ?>
</div>
<?php
unset($required, $placeholder, $id, $hint, $attrs, $selectAttrStr, $k, $v);
