<?php

namespace WPDesk\RepositoryRating;

use WPDesk\PluginBuilder\Plugin\Hookable;
use WPDesk\RepositoryRating\DisplayStrategy\DisplayDecision;

/**
 * Can display text petition.
 */
class TextPetitionDisplayer implements Hookable {

	const SCRIPTS_VERSION = '2';

	/**
	 * @var string
	 */
	private $display_on_action;

	/**
	 * @var DisplayDecision
	 */
	private $display_decision;

	/**
	 * @var PetitionText
	 */
	private $petition_text_generator;

	/**
	 * @param string $display_on_action
	 * @param DisplayDecision $display_decision
	 * @param PetitionText $petition_text_generator
	 */
	public function __construct( string $display_on_action, DisplayDecision $display_decision, PetitionText $petition_text_generator ) {
		$this->display_on_action       = $display_on_action;
		$this->display_decision        = $display_decision;
		$this->petition_text_generator = $petition_text_generator;
	}

	public function hooks() {
		add_action( $this->display_on_action, [ $this, 'display_petition_if_should' ] );
		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_css_if_should' ] );
	}

	/**
	 * @internal
	 */
	public function enqueue_css_if_should() {
		if ( $this->display_decision->should_display() ) {
			wp_enqueue_style( 'wpdesk-rating-petition', plugin_dir_url( __DIR__ . '/../assets/css/style.css' ) . 'style.css', array(), self::SCRIPTS_VERSION );
		}
	}

	/**
	 * @internal
	 */
	public function display_petition_if_should() {
		if ( $this->display_decision->should_display() ) {
			echo wp_kses_post( $this->petition_text_generator->get_petition_text() );
		}
	}

}