<?php

class Svg {

  /**
   * Renderiza a seção de edição do svg selecionado.
   * 
   * @param mixed $svg O código do svg.
   * @return string O código HTML da seção de edição.
   */
  private static function editor() {
    $html = '
      <div class="o2-svg-field-editor">
        <textarea class="o2-svg-field-textarea"></textarea>
        <div class="o2-svg-field-editor-options">
          <button type="button" title="Salvar" class="o2-svg-field-salvar o2-button-icon o2-button-green mb-2">
            Salvar
            <span class="material-icons">done</span>
          </button>
          <button type="button" title="Cancelar" class="o2-svg-field-cancelar o2-button-icon o2-button-red">
            Cancelar
            <span class="material-icons">cancel</span>
          </button>
        </div>
      </div>
    ';
    return $html;
  }

  /**
   * Renderiza a seção de detalhes da imagem selecionada.
   * 
   * @param mixed $svg O código do svg.
   * @return string O código HTML da seção de detalhes.
   */
  private static function details($svg) {
    $html = '
      <div class="o2-svg-field-details">
        <div class="o2-svg-field-render">%s</div>
        <div class="o2-svg-field-details-options">
          <button type="button" title="Editar" class="o2-svg-field-editar o2-button-icon o2-button-blue mb-2">
            Editar
            <span class="material-icons">edit</span>
          </button>
          <button type="button" title="Remover" class="o2-svg-field-remover o2-button-icon o2-button-red">
            Remover
            <span class="material-icons">cancel</span>
          </button>
        </div>
      </div>
    ';
    return sprintf($html, html_entity_decode($svg));
  }

  /**
   * Renderiza a seção quando nenhuma svg é cadastrado.
   * @return string O código HTML da seção sem svg cadastrado.
   */
  private static function unselected() {
    $html = sprintf('
      <button type="button" title="Adicionar svg" class="o2-button-icon o2-button-blue o2-svg-field-add">
        Adicionar
        <span class="material-icons">add</span>
      </button>
      Nenhum svg cadastrado
    ');

    return $html;
  }

  /**
   * Renderiza o campo de imagem.
   * 
   * @param string $key O nome do campo.
   * @param mixed $value O id da imagem.
   * @param string $size Dimensão do campo.
   * @return string O código HTML do campo de imagem.
   */
  public static function render($key, $value, $size) {
    $selected = $value != "";
    $size_class = "";

    switch ($size) {
      case 'small':
        $size_class = 'o2-svg-field-small';
        break;
      case 'medium':
        $size_class = 'o2-svg-field-medium';
        break;
      case 'large':
        $size_class = 'o2-svg-field-large';
        break;
    }

    $html = sprintf('<div class="o2-svg-field %s">', $size_class);
    $html .= sprintf('<div class="o2-svg-field-unselected %s">%s</div>', ($selected ? "d-none" : ""), self::unselected());
    $html .= sprintf('<div class="o2-svg-field-edit d-none">%s</div>', self::editor());
    $html .= sprintf('<div class="o2-svg-field-selected %s">%s</div>', ($selected ? "" : "d-none"), self::details($value));
    $html .= Input::render(['name' => $key, 'value' => html_entity_decode($value), 'type' => 'hidden']);

    $html .= '</div>';
    return $html;
  }
}
