<?php
class tab {

  // Variável estática para armazenar as tabs criadas
  private static $tabs;

  /**
   * Adiciona uma nova tab ao conjunto de tabs.
   *
   * @param string $label O rótulo da tab a ser adicionada.
   */
  public static function add_tab($label) {
    if (empty(self::$tabs))
      self::$tabs = [$label];
    else
      self::$tabs[] = $label;
  }

  /**
   * Cria uma nova tab e define o conteúdo associado a ela.
   *
   * @param string $label O rótulo da tab a ser criada.
   * @param callable $callback Uma função de retorno que define o conteúdo da tab.
   */
  public static function create_tab($label, $callback) {
    self::add_tab($label);
    $count = count(self::$tabs);
    if ($count == 1)
      printf('<div class="o2-tab-container o2-tab-%d">', count(self::$tabs));
    else
      printf('<div class="o2-tab-container o2-tab-%d d-none">', count(self::$tabs));

    call_user_func($callback); // Chama a função de callback para definir o conteúdo da tab
    echo '</div>';
  }

  /**
   * Renderiza todas as tabs criadas junto com seu conteúdo.
   *
   * @param callable $callback Uma função de retorno que define o conteúdo das tabs.
   */
  public static function render($callback) {
    ob_start();
    call_user_func($callback); // Chama a função de callback para definir o conteúdo das tabs
    $wrappers = ob_get_clean(); // Armazena o conteúdo do buffer de saída

    echo '<div class="o2-tab">';

    // Renderiza a navegação das tabs
    echo '<div class="o2-tab-nav">';
    if (is_array(self::$tabs))
      foreach (self::$tabs as $i => $tab)
        if ($i == 0)
          printf('<button type="button" title="%s" data-tab="o2-tab-%s" class="active">%s</button>', $tab, $i + 1, $tab);
        else
          printf('<button type="button" title="%s" data-tab="o2-tab-%s">%s</button>', $tab, $i + 1, $tab);

    echo '</div>';

    // Renderiza o conteúdo das tabs
    echo '<div class="o2-tab-wrapper">';
    echo $wrappers;
    echo '</div>';

    echo '</div>';

    // Limpa a lista de tabs para serem reutilizadas em futuras chamadas
    self::$tabs = [];
  }
}
