<?php
namespace AIOSEO\Plugin\Common\Meta;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * To check whether SEO is enabled for the queried object.
 *
 * @since 4.0.0
 */
class Included {
	/**
	 * Checks whether the queried object is included.
	 *
	 * @since 4.0.0
	 *
	 * @return bool
	 */
	public function isIncluded() {
		if ( is_admin() || is_feed() ) {
			return false;
		}

		if ( apply_filters( 'aioseo_disable', false ) || $this->isExcludedGlobal() ) {
			return false;
		}

		return true;
	}

	/**
	 * Checks whether the queried object has been excluded globally.
	 *
	 * @since 4.0.0
	 *
	 * @return bool
	 */
	protected function isExcludedGlobal() {
		if ( is_category() || is_tag() || is_tax() ) {
			return $this->isTaxExcludedGlobal();
		}

		if ( ! in_array( 'excludePosts', aioseo()->internalOptions->deprecatedOptions, true ) ) {
			return false;
		}

		$excludedPosts = aioseo()->options->deprecated->searchAppearance->advanced->excludePosts;

		if ( empty( $excludedPosts ) ) {
			return false;
		}

		$ids = [];
		foreach ( $excludedPosts as $object ) {
			$object = json_decode( $object );
			if ( is_int( $object->value ) ) {
				$ids[] = (int) $object->value;
			}
		}

		$post = aioseo()->helpers->getPost();
		if ( empty( $post ) ) {
			return false;
		}

		if ( in_array( (int) $post->ID, $ids, true ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Checks whether the queried object has been excluded globally.
	 *
	 * @since 4.0.0
	 *
	 * @return bool
	 */
	protected function isTaxExcludedGlobal() {
		if ( ! in_array( 'excludeTerms', aioseo()->internalOptions->deprecatedOptions, true ) ) {
			return false;
		}

		$excludedTerms = aioseo()->options->deprecated->searchAppearance->advanced->excludeTerms;

		if ( empty( $excludedTerms ) ) {
			return false;
		}

		$ids = [];
		foreach ( $excludedTerms as $object ) {
			$object = json_decode( $object );
			if ( is_int( $object->value ) ) {
				$ids[] = (int) $object->value;
			}
		}

		$term = get_queried_object();
		if ( in_array( (int) $term->term_id, $ids, true ) ) {
			return true;
		}
		return false;
	}
}