<?php
class Link {

  /**
   * Função para renderizar a visualização de nenhum link selecionado.
   */
  private static function unselected() {
    $html = sprintf('
      <button type="button" title="Adicionar Link" class="o2-button-icon o2-button-blue o2-link-field-add">
        Adicionar
        <span class="material-icons">add_link</span>
      </button>
      Nenhum link configurado
    ');

    return $html;
  }

  /**
   * Função para renderizar a visualização de um link selecionado.
   *
   * @param array|string $value - O valor do link selecionado, pode ser uma string ou um array com chaves 'text' e 'url'.
   *
   * @return string - O HTML formatado representando o link selecionado.
   */
  private static function datails($value) {
    $text = Helper::get_value_by_indexs($value, 'text');
    $url = Helper::get_value_by_indexs($value, 'url');

    $html = '
      <div class="o2-link-field-details">
        <div class="o2-link-field-title">%s</div>
        <div class="o2-link-field-url">%s</div>
        <div class="o2-link-field-buttons">
          <a href="%s" target="_blank" title="Abrir Link" class="o2-link-field-access me-2"><span class="material-icons">open_in_new</span></a>
          <button type="button" title="Editar Link" class="o2-link-field-edit me-2"><span class="material-icons">edit</span></button>
          <button type="button" title="Remover Link" class="o2-link-field-remove"><span class="material-icons">close</span></button>
        </div>
      </div>
    ';

    $formated = sprintf($html, $text ? $text : 'Sem título', $url, $url);

    return $formated;
  }

  /**
   * Função para renderizar o campo de link.
   *
   * @param string $key - A chave do campo (nome do campo).
   * @param array|string $value - O valor do campo, pode ser uma string ou um array com chaves 'text', 'url' e 'target'.
   *
   * @return string - O HTML formatado representando o campo de link.
   */
  public static function render($key, $value) {
    if (is_array($value)) {
      $selected = Helper::get_value_by_indexs($value, 'text') || Helper::get_value_by_indexs($value, 'url');
    } else {
      $selected = false;
    }

    $html = '<div class="o2-link-field">';

    $html .= sprintf('<div class="o2-link-field-unselected %s">%s</div>', ($selected ? "d-none" : ""), self::unselected());
    $html .= sprintf('<div class="o2-link-field-selected %s">%s</div>', ($selected ? "" : "d-none"), self::datails($value));

    $html .= Input::render(['name' => $key . '[text]', 'value' => Helper::get_value_by_indexs($value, 'text'), 'type' => 'hidden', 'class' => 'o2-link-field-input-text']);
    $html .= Input::render(['name' => $key . '[url]', 'value' => Helper::get_value_by_indexs($value, 'url'), 'type' => 'hidden', 'class' => 'o2-link-field-input-url']);
    $html .= Input::render(['name' => $key . '[target]', 'value' => Helper::get_value_by_indexs($value, 'target'), 'type' => 'hidden', 'class' => 'o2-link-field-input-target']);

    $html .= '</div>';

    return $html;
  }
}
