<?php

/**
 * Gera um campo de texto HTML com formatação.
 *
 * Esta função chamará o campo de texto e retornará um HTML com formatação padrão.
 *
 * @param string $label       O rótulo do campo.
 * @param string $key         O nome do campo.
 * @param array  $attributes  Atributos adicionais para o campo.
 * @return string O campo de texto HTML renderizado.
 */
function o2_get_text_form($label, $key, $attributes = []) {
  $attributes['class'] = 'form-control ' . ($attributes['class'] ?? "");
  $attributes['id'] = $key;

  $html = '<div class="mb-3">';
  $html .= sprintf('<label class="form-label">%s</label>', $label);
  $html .= o2_get_text_field($key, $attributes);
  $html .= '</div>';

  return $html;
}

/**
 * Imprime um campo de texto HTML com formatação.
 *
 * Esta função imprimirá um campo de texto com as formatações padrão.
 *
 * @param string $label       O rótulo do campo.
 * @param string $key         O nome do campo.
 * @param array  $attributes  Atributos adicionais para o campo.
 */
function o2_text_form($label, $key, $attributes = []) {
  echo o2_get_text_form($label, $key, $attributes);
}

/**
 * Gera um campo de texto HTML com formatação.
 *
 * Esta função chamará o campo de texto e retornará um HTML com formatação padrão.
 *
 * @param string $label       O rótulo do campo.
 * @param string $key         O nome do campo.
 * @param array  $attributes  Atributos adicionais para o campo.
 * @return string O campo de texto HTML renderizado.
 */
function o2_get_textarea_form($label, $key, $attributes = []) {
  $attributes['class'] = 'form-control ' . ($attributes['class'] ?? "");
  $attributes['id'] = $key;

  $html = '<div class="mb-3">';
  $html .= sprintf('<label class="form-label">%s</label>', $label);
  $html .= o2_get_textarea_field($key, $attributes);
  $html .= '</div>';

  return $html;
}

/**
 * Imprime um campo de texto HTML com formatação.
 *
 * Esta função imprime um campo de texto com formatação padrão.
 *
 * @param string $label       O rótulo do campo.
 * @param string $key         O nome do campo.
 * @param array  $attributes  Atributos adicionais para o campo.
 */
function o2_textarea_form($label, $key, $attributes = []) {
  echo o2_get_textarea_form($label, $key, $attributes);
}

/**
 * Gera um campo de imagem com formatação.
 *
 * Esta função chamará o campo de imagem e retornará um HTML com formatação padrão.
 *
 * @param string $label  O rótulo do campo.
 * @param string $key    O nome do campo.
 * @param string $size   Dimensão do campo: "small", "medium", "large"
 * @return string O campo de imagem HTML renderizado.
 */
function o2_get_image_form($label, $key, $size = "medium") {
  $html = '<div class="mb-3">';
  $html .= sprintf('<span class="form-label">%s</span>', $label);
  $html .= o2_get_image_field($key, $size);
  $html .= '</div>';

  return $html;
}

/**
 * Imprime um campo de imagem com formatação.
 *
 * Esta função imprime um campo de imagem com formatação padrão.
 *
 * @param string $label  O rótulo do campo.
 * @param string $key    O nome do campo.
 * @param string $size   Dimensão do campo: "small", "medium", "large"
 */
function o2_image_form($label, $key, $size = "medium") {
  echo o2_get_image_form($label, $key, $size);
}

/**
 * Gera um formulário de seleção com formatação.
 *
 * Esta função gera um formulário de seleção com um rótulo e opções.
 * Ela retorna um HTML com a formatação padrão.
 *
 * @param string $label       O rótulo do formulário.
 * @param string $key         O nome do formulário.
 * @param array  $options     As opções do formulário.
 * @param array  $attributes  Atributos opcionais do formulário.
 * @return string O formulário de seleção HTML renderizado.
 */
function o2_get_select_form($label, $key, $options, $attributes = []) {
  $html = sprintf('
  <div class="mb-3">
    <span class="form-label">%s</span>
    %s
  </div>
  ', $label, o2_get_select_field($key, $options, $attributes));
  return $html;
}

/**
 * Imprime um formulário de seleção com formatação.
 *
 * Esta função imprime um formulário de seleção com formatação padrão.
 *
 * @param string $label       O rótulo do formulário.
 * @param string $key         O nome do formulário.
 * @param array  $options     As opções do formulário.
 * @param array  $attributes  Atributos opcionais do formulário.
 */
function o2_select_form($label, $key, $options, $attributes = []) {
  echo o2_get_select_form($label, $key, $options, $attributes);
}

/**
 * Gera um formulário com campo de checkboxes.
 *
 * Esta função gera um formulário com um campo de checkboxes com base nos parâmetros fornecidos.
 * O formulário inclui um rótulo, o nome do campo, as opções de checkboxes, a direção do layout dos checkboxes e atributos adicionais.
 * O formulário é retornado como uma string contendo HTML formatado.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @param array $options Opções do campo.
 * @param string $direction Direção do layout dos checkboxes: "horizontal" (padrão) ou "vertical".
 * @param array $attributes Atributos adicionais para o campo.
 * @return string O formulário com campo de checkboxes HTML renderizado.
 */
function o2_get_checkbox_form($label, $key, $options, $direction = 'horizontal', $attributes = []) {
  $html = sprintf('
  <div class="mb-3">
      <span class="form-label">%s</span>
      %s
  </div>
  ', $label, o2_get_checkbox_field($key, $options, $direction, $attributes));
  return $html;
}

/**
 * Imprime um formulário com campo de checkboxes.
 *
 * Esta função imprime um formulário com um campo de checkboxes com base nos parâmetros fornecidos.
 * O formulário inclui um rótulo, o nome do campo, as opções de checkboxes, a direção do layout dos checkboxes e atributos adicionais.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @param array $options Opções do campo.
 * @param string $direction Direção do layout dos checkboxes: "horizontal" (padrão) ou "vertical".
 * @param array $attributes Atributos adicionais para o campo.
 */
function o2_checkbox_form($label, $key, $options, $direction = 'horizontal', $attributes = []) {
  echo o2_get_checkbox_form($label, $key, $options, $direction, $attributes);
}

/**
 * Gera um formulário com campo de radio buttons.
 *
 * Esta função gera um formulário com um campo de radio buttons com base nos parâmetros fornecidos.
 * O formulário inclui um rótulo, o nome do campo, as opções de radio buttons, a direção do layout dos radio buttons e atributos adicionais.
 * O formulário é retornado como uma string contendo HTML formatado.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @param array $options Opções do campo.
 * @param string $direction Direção do layout dos radio buttons: "horizontal" (padrão) ou "vertical".
 * @param array $attributes Atributos adicionais para o campo.
 * @return string O formulário com campo de radio buttons HTML renderizado.
 */
function o2_get_radio_form($label, $key, $options, $direction = 'horizontal', $attributes = []) {
  $html = sprintf('
  <div class="mb-3">
      <span class="form-label">%s</span>
      %s
  </div>
  ', $label, o2_get_radio_field($key, $options, $direction, $attributes));
  return $html;
}

/**
 * Imprime um formulário com campo de radio buttons.
 *
 * Esta função imprime um formulário com um campo de radio buttons com base nos parâmetros fornecidos.
 * O formulário inclui um rótulo, o nome do campo, as opções de radio buttons, a direção do layout dos radio buttons e atributos adicionais.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @param array $options Opções do campo.
 * @param string $direction Direção do layout dos radio buttons: "horizontal" (padrão) ou "vertical".
 * @param array $attributes Atributos adicionais para o campo.
 */
function o2_radio_form($label, $key, $options, $direction = 'horizontal', $attributes = []) {
  echo o2_get_radio_form($label, $key, $options, $direction, $attributes);
}


/**
 * Retorna o HTML para exibir um formulário com um campo de editor do WordPress.
 *
 * Esta função retorna o HTML para exibir um formulário com um campo de editor do WordPress com base nos parâmetros fornecidos.
 * O formulário inclui um rótulo e o campo de editor.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @param array $settings Configurações adicionais para o campo de editor.
 * @return string O HTML para exibir o formulário com o campo de editor.
 */
function o2_get_editorwp_form($label, $key, $settings = array()) {
  $class = "";

  if (isset($settings['media_buttons']) && !$settings['media_buttons'])
    $class = "form-label-margin-negative";

  $html = sprintf('
  <div class="mb-3">
    <span class="form-label %s">%s</span>
    %s
  </div>
  ', $class, $label, o2_get_editorwp_field($key, $settings));
  return $html;
}

/**
 * Imprime um formulário com um campo de editor do WordPress.
 *
 * Esta função imprime um formulário com um campo de editor do WordPress com base nos parâmetros fornecidos.
 * O formulário inclui um rótulo e o campo de editor.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @param array $settings Configurações adicionais para o campo de editor.
 */
function o2_editorwp_form($label, $key, $settings = array()) {
  echo o2_get_editorwp_form($label, $key, $settings);
}

/**
 * Retorna o HTML para exibir um formulário com um campo de editor simples.
 *
 * Esta função retorna o HTML para exibir um formulário com um campo de editor simples com base no rótulo e no nome do campo.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @param array $settings Configurações adicionais: 'media-buttons: true' 
 * @param array $settings Configurações adicionais para o campo de editor.
 * @return string O HTML para exibir o formulário com o campo de editor.
 */
function o2_get_editor_form($label, $key, $settings = array()) {
  $html = sprintf('
  <div class="mb-3">
    <span class="form-label form-label-margin-negative">%s</span>
    %s
  </div>
  ', $label, o2_get_editor_field($key, $settings));
  return $html;
}
/**
 * Imprime um formulário com um campo de editor simples.
 *
 * @param string $label O rótulo do formulário.
 * @param array $settings Configurações adicionais: 'media-buttons: true' 
 * @param string $key O nome do campo.
 */
function o2_editor_form($label, $key, $settings = []) {
  echo o2_get_editor_form($label, $key, $settings);
}

/**
 * Retorna o HTML para exibir um formulário com um campo de arquivo.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @return string O HTML para exibir o formulário com o campo de arquivo.
 */
function o2_get_file_form($label, $key) {
  $html = sprintf('
  <div class="mb-3">
    <span class="form-label">%s</span>
    %s
  </div>
  ', $label, o2_get_file_field($key));
  return $html;
}

/**
 * Imprime um formulário com um campo de arquivo.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 */
function o2_file_form($label, $key) {
  echo o2_get_file_form($label, $key);
}

/**
 * Retorna o HTML para exibir um formulário com um campo de link.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 * @return string O HTML para exibir o formulário com o campo de link.
 */
function o2_get_link_form($label, $key) {
  $html = sprintf('
  <div class="mb-3">
    <span class="form-label">%s</span>
    %s
  </div>
  ', $label, o2_get_link_field($key));
  return $html;
}

/**
 * Imprime um formulário com um campo de link.
 *
 * @param string $label O rótulo do formulário.
 * @param string $key O nome do campo.
 */
function o2_link_form($label, $key) {
  echo o2_get_link_form($label, $key);
}

/**
 * 
 */
function o2_get_number_form($label, $key, $attributes = array()) {
  $html = sprintf('
  <div class="mb-3">
      <span class="form-label">%s</span>
      %s
  </div>
  ', $label, o2_get_number_field($key, $attributes));
  return $html;
}

/**
 * 
 */
function o2_number_form($label, $key, $attributes = array()) {
  echo o2_get_number_form($label, $key, $attributes);
}

/**
 * 
 */
function o2_get_color_form($label, $key) {
  $html = sprintf('
  <div class="mb-3">
    <span class="form-label">%s</span>
    %s
  </div>
  ', $label, o2_get_color_field($key));
  return $html;
}

/**
 * 
 */
function o2_color_form($label, $key) {
  echo o2_get_color_form($label, $key);
}

/**
 * Gera um campo de svg com formatação.
 *
 * Esta função chamará o campo de svg e retornará um HTML com formatação padrão.
 *
 * @param string $label  O rótulo do campo.
 * @param string $key    O nome do campo.
 * @param string $size   Dimensão do campo: "small", "medium", "large"
 * @return string O campo de imagem HTML renderizado.
 */
function o2_get_svg_form($label, $key, $size = "medium") {
  $html = '<div class="mb-3">';
  $html .= sprintf('<span class="form-label">%s</span>', $label);
  $html .= o2_get_svg_field($key, $size);
  $html .= '</div>';

  return $html;
}

/**
 * Imprime um campo de svg com formatação.
 *
 * Esta função imprime um campo de svg com formatação padrão.
 *
 * @param string $label  O rótulo do campo.
 * @param string $key    O nome do campo.
 * @param string $size   Dimensão do campo: "small", "medium", "large"
 */
function o2_svg_form($label, $key, $size = "medium") {
  echo o2_get_svg_form($label, $key, $size);
}

/**
 * Gera um campo de select com todos os posts/pages cadastrados
 * 
 * Esta função retornará um select com busca exibir todos os posts/pages cadastrados, a opções de filtros também.
 * 
 * @param string $label O rótulo do campo.
 * @param string $key O nome do campo.
 * @param string $attr Atributos adicionais como  
 */
function o2_get_relational_form($label, $key, $args = []) {
  $html = '<div class="mb-3">';
  $html .= sprintf('<span class="form-label">%s</span>', $label);
  $html .= o2_get_relational_field($key, $args);
  $html .= '</div>';
  return $html;
}


/**
 * Imprime um campo de select com todos os posts/pages cadastrados
 * 
 * Esta função retornará um select com busca exibir todos os posts/pages cadastrados, a opções de filtros também.
 * 
 * @param string $label O rótulo do campo.
 * @param string $key O nome do campo.
 * @param string $attr Atributos adicionais como  
 */
function o2_relational_form($label, $key, $args = []) {
  echo o2_get_relational_form($label, $key, $args);
}
