<?php

/**
 * Classe MetaboxController
 *
 * Responsável por controlar e gerenciar os metaboxes personalizados.
 */
class MetaboxController {
  /**
   * @var mixed O metabox atualmente em uso.
   */
  private static $metabox;

  /**
   * @var int Contador usado para gerar prefixos únicos para os metaboxes.
   */
  private static $cont = 0;

  /**
   * Define o metabox atual.
   *
   * @param mixed $metabox O metabox a ser definido.
   */
  public static function set_metabox(&$metabox) {
    self::$metabox = $metabox;
  }

  /**
   * Retorna o metabox atualmente em uso.
   *
   * @return mixed O metabox atualmente em uso.
   */
  public static function get_metabox() {
    return self::$metabox;
  }

  /**
   * Define o valor do contador.
   *
   * @param int $n O valor do contador.
   */
  public static function set_cont($n) {
    self::$cont = $n;
  }

  /**
   * Retorna o valor do contador.
   *
   * @return int O valor do contador.
   */
  public static function get_cont() {
    return self::$cont;
  }

  /**
   * Retorna um prefixo único para os metaboxes.
   *
   * @return string O prefixo único para os metaboxes.
   */
  public static function get_prefix() {
    return 'o2m_metabox_' . self::$cont++;
  }

  /**
   * Verifica se existe um metabox em uso.
   *
   * @return bool Retorna true se houver um metabox em uso, caso contrário, retorna false.
   */
  public static function in_metabox() {
    return self::$metabox !== null;
  }

  /**
   * Retorna o tipo da instancia do metabox, caso não esteja em um retorná 'none'
   *
   * @return string Retorna o tipo do metabox, sendo 'term', 'post' e 'none'.
   */
  public static function get_type() {
    if (self::$metabox == null)
      return 'none';
    else if (get_class(self::$metabox) === 'Metabox')
      return 'post';
    else
      return 'term';
  }

  /**
   * Adiciona um campo ao metabox atual.
   *
   * @param string $key A chave do campo a ser adicionado.
   */
  public static function add_field($key) {
    if (self::in_metabox()) {
      $metabox = self::get_metabox();
      $metabox->add_field($key);
    }
  }
}
