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

namespace Hafenstudios\Wellenbrecher\Rules;

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

defined( 'ABSPATH' ) || exit;

/**
 * Linkdichte: je Link ab dem zweiten gibt es Punkte (Default +10),
 * gedeckelt auf das Dreifache (Default +30). Ein einzelner Link ist
 * normal, drei und mehr sind das klassische Linkschleuder-Muster.
 */
class LinkCountRule extends AbstractRule {

	public const ID             = 'link_count';
	public const DEFAULT_POINTS = 10;

	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 {
		$count = count( Text::urls( $context->field( 'content' ) ) );
		if ( $count < 2 ) {
			return $this->miss();
		}
		$cap    = $this->points * 3;
		$earned = min( $cap, ( $count - 1 ) * $this->points );
		return new RuleResult( $earned, $this->id() );
	}
}
