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

namespace Hafenstudios\Wellenbrecher\Rules;

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

defined( 'ABSPATH' ) || exit;

/**
 * Gemeinsame Basis der Katalog-Regeln: konfigurierte Punkte (Default aus dem
 * Katalog Kap. 6, Override aus Settings rules.{id}.points via RuleRegistry)
 * und die Treffer-/Kein-Treffer-Helfer.
 */
abstract class AbstractRule implements RuleInterface {

	/**
	 * Konfigurierte Punkte dieser Regel.
	 *
	 * @var int
	 */
	protected int $points;

	/**
	 * @param int $points Punkte (Default aus dem Regelkatalog).
	 */
	public function __construct( int $points ) {
		$this->points = $points;
	}

	/**
	 * Regeln gelten per Default fuer alle Kanaele.
	 *
	 * @param Context $context Bewertungs-Kontext.
	 * @return bool
	 */
	public function applies( Context $context ): bool {
		return true;
	}

	/**
	 * Treffer mit den konfigurierten Punkten.
	 *
	 * @return RuleResult
	 */
	protected function hit(): RuleResult {
		return new RuleResult( $this->points, $this->id() );
	}

	/**
	 * Kein Treffer.
	 *
	 * @return RuleResult
	 */
	protected function miss(): RuleResult {
		return RuleResult::none( $this->id() );
	}
}
