<?php
class SupportRemover {
  private $type;
  private $needle;
  private $features;

  /**
   * Construtor da classe.
   *
   * @param string $type O tipo de verificação para remoção de suporte. Pode ser 'id', 'slug' ou 'post_type'.
   * @param mixed $needle O valor a ser verificado de acordo com o tipo definido ('id', 'slug' ou 'post_type').
   * @param array $features Um array contendo os suportes a serem removidos.
   */
  public function __construct($type, $needle, $features) {
    $this->type = $type;
    $this->needle = $needle;
    $this->features = $features;

    // Adiciona a ação 'admin_init' para chamar o método 'remove_editor_support' quando a área de administração é iniciada.
    add_action('admin_init', array($this, 'remove_editor_support'));
  }

  /**
   * Método para remover os suportes especificados das postagens que atendem às condições.
   */
  public function remove_editor_support() {
    $post_id = intval(filter_input(INPUT_GET, 'post', FILTER_SANITIZE_NUMBER_INT));
    $post_type = get_post_type($post_id);

    if ($this->check($post_id, $post_type)) {
      foreach ($this->features as $feature) {
        // Remove o suporte da postagem.
        remove_post_type_support($post_type, $feature);
      }
    }
  }

  /**
   * Verifica se a postagem atende às condições para remoção do suporte.
   *
   * @param int $post_id O ID da postagem a ser verificada.
   * @param string $post_type O tipo de postagem da postagem a ser verificada.
   * @return bool Retorna true se a postagem atende às condições de remoção de suporte, caso contrário, retorna false.
   */
  private function check($post_id, $post_type) {
    $is_remove = true;

    switch (strtolower($this->type)) {
      case 'id':
        if ($this->needle !== $post_id)
          $is_remove = false;
        break;

      case 'slug':
        $slug = get_post_field('post_name', $post_id);
        if ($slug !== $this->needle)
          $is_remove = false;
        break;

      case 'post_type':
        if ($post_type !== $this->needle)
          $is_remove = false;
        break;
    }

    return $is_remove;
  }
}
