<?php

class Checkbox {
  /**
   * Gera o código HTML dos checkboxes com as opções e atributos fornecidos.
   * 
   * @param array $options Opções para formação do HTML.
   * @param array $attributes Atributos adicionais para o campo.
   * @return string O código HTML renderizado.
   */
  public static function render($options, $attributes) {
    $attribute_value = $attributes['value'] ?? null;
    $html = '';
    $is_associative = Helper::is_associative_array($options);

    foreach ($options as $key => $value) {
      if ($is_associative) {
        $option_value = $key;
        $option_label = $value;
      } else {
        $option_value = $option_label = $value;
      }

      $options_attributes = array_merge($attributes, [
        'name' => $attributes['name'] . '[]' ?? null,
        'value' => $option_value,
        'type' => 'checkbox',
      ]);

      if (is_array($attribute_value) && in_array($option_value, $attribute_value))
        $options_attributes['checked'] = 'checked';

      $option_html = sprintf(
        '<label>%s %s</label>',
        Input::render($options_attributes),
        Helper::sanitize_value($option_label)
      );

      $html .= $option_html;
    }

    return $html;
  }
}
