<?php
/**
 * @package Hafenstudios\Wellenbrecher
 */

namespace Hafenstudios\Wellenbrecher\Rules;

use Hafenstudios\Wellenbrecher\Engine\Context;
use Hafenstudios\Wellenbrecher\Engine\RuleResult;

defined( 'ABSPATH' ) || exit;

/**
 * WordPress-eigene disallowed_keys respektieren: trifft ein Eintrag der
 * Kern-Sperrliste (Einstellungen > Diskussion), gibt es Punkte. Das
 * Kern-Urteil selbst (trash) bleibt unangetastet; die Kanal-Adapter
 * respektieren es zusaetzlich (Bauplan Kap. 7.1).
 */
class DisallowedKeysRule extends AbstractRule {

	public const ID             = 'disallowed_keys';
	public const DEFAULT_POINTS = 25;

	public function __construct( int $points = self::DEFAULT_POINTS ) {
		parent::__construct( $points );
	}

	public function id(): string {
		return self::ID;
	}

	public function stage(): int {
		return 2;
	}

	public function evaluate( Context $context ): RuleResult {
		$keys = trim( (string) get_option( 'disallowed_keys', '' ) );
		if ( '' === $keys ) {
			return $this->miss();
		}

		$haystack = mb_strtolower(
			implode(
				"\n",
				array(
					$context->field( 'author_name' ),
					$context->field( 'author_email' ),
					$context->field( 'author_url' ),
					$context->field( 'content' ),
				)
			)
		);

		foreach ( explode( "\n", $keys ) as $needle ) {
			$needle = mb_strtolower( trim( $needle ) );
			if ( '' === $needle ) {
				continue;
			}
			if ( false !== mb_strpos( $haystack, $needle ) ) {
				return $this->hit();
			}
		}
		return $this->miss();
	}
}
