<?php
namespace Gigneo\Emails;

use WC_Email;

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

/**
 * Class Service_Revision
 *
 * Sends an email notification to the freelancer when a revision is requested for their delivered service order.
 *
 * @since 0.0.1
 */
class Service_Revision extends WC_Email {

	/**
	 * Constructor.
	 *
	 * @since 0.0.1
	 */
	public function __construct() {
		$this->id             = 'gigneo_service_revision';
		$this->title          = esc_html__( 'Gigneo - Service order revision', 'gigneo' );
		$this->description    = esc_html__( 'This email is sent to the freelancer when the employer requests a revision for a delivered order.', 'gigneo' );
		$this->template_html  = 'email/service-order-revision.php';
		$this->template_plain = 'email/plain/service-order-revision.php';
		$this->template_base  = GIGNEO_DIR_PATH . 'templates/';
		$this->customer_email = true;
		$this->placeholders   = array(
			'{profile_name}'  => 'John Doe',
			'{employer_name}' => 'Jane Smith',
			'{service_title}' => 'Professional Web Development',
			'{order_id}'      => '123',
			'{service_id}'    => '456',
			'{order_link}'    => '#',
		);

		parent::__construct();
	}

	/**
	 * Trigger the email to freelancer when their delivery got revision.
	 *
	 * @param int   $profile_id   Freelancer ID (recipient).
	 * @param int   $order_id     Order ID.
	 *
	 * @since 0.0.1
	 */
	public function trigger( $profile_id, $order_id ) {
		if ( $profile_id && ! empty( $order_id ) ) {
			$order_id           = absint( $order_id );
			$freelancer_user_id = get_post_field( 'post_author', $profile_id );
			$freelancer         = get_userdata( $freelancer_user_id );
			$profile_name       = gigneo_profile_name( $profile_id );
			$employer_id        = gigneo_post_meta( $order_id, '_gigneo_pm_profile_id' );
			$employer_name      = gigneo_profile_name( $employer_id );
			$service_id         = gigneo_post_meta( $order_id, '_gigneo_pm_service_id' );
			$service_title      = gigneo_post_meta( $order_id, '_gigneo_pm_service_title' );
			$order_link         = gigneo_dashboard_url( 'order', 'service-detail', array( 'p_id' => $order_id ) );
			if ( $freelancer && $employer_id ) {
				// Populate placeholders.
				$this->recipient                       = $freelancer->user_email;
				$this->placeholders['{profile_name}']  = $profile_name ?? '';
				$this->placeholders['{employer_name}'] = $employer_name ?? '';
				$this->placeholders['{service_title}'] = $service_title ?? '';
				$this->placeholders['{service_id}']    = $service_id;
				$this->placeholders['{order_id}']      = $order_id;
				$this->placeholders['{order_link}']    = gigneo_dashboard_url( 'order', 'service-detail', array( 'p_id' => $order_id ) );
				// Send email if enabled and recipient exists.
				if ( $this->is_enabled() && $this->get_recipient() ) {
					$this->send(
						$this->get_recipient(),
						$this->get_subject(),
						$this->get_content(),
						$this->get_headers(),
						$this->get_attachments()
					);
				}
			}
		}
	}

	/**
	 * Default email subject line before settings override.
	 *
	 * @since 0.0.1
	 *
	 * @return string
	 */
	public function get_default_subject() {
		return esc_html__( '{site_title} – Service order revision has been requested.', 'gigneo' );
	}

	/**
	 * Default email heading before settings override.
	 *
	 * @since 0.0.1
	 *
	 * @return string
	 */
	public function get_default_heading() {
		return esc_html__( 'A revision has been requested.', 'gigneo' );
	}

	/**
	 * Get HTML content for the email.
	 *
	 * @since 0.0.1
	 */
	public function get_content_html() {
		return wc_get_template_html(
			$this->template_html,
			array(
				'email_heading'  => $this->get_heading(),
				'profile_name'   => $this->placeholders['{profile_name}'],
				'employer_name'  => $this->placeholders['{employer_name}'],
				'service_title'  => $this->placeholders['{service_title}'],
				'order_id'       => $this->placeholders['{order_id}'],
				'service_id'     => $this->placeholders['{service_id}'],
				'order_link'     => $this->placeholders['{order_link}'],
				'employer_label' => gigneo_employer_singular(),
				'plain_text'     => false,
				'sent_to_admin'  => false,
				'email'          => $this,
			),
			'',
			$this->template_base
		);
	}

	/**
	 * Get plain text content for the email.
	 *
	 * @since 0.0.1
	 */
	public function get_content_plain() {
		return wc_get_template_html(
			$this->template_plain,
			array(
				'email_heading'  => $this->get_heading(),
				'profile_name'   => $this->placeholders['{profile_name}'],
				'employer_name'  => $this->placeholders['{employer_name}'],
				'service_title'  => $this->placeholders['{service_title}'],
				'order_id'       => $this->placeholders['{order_id}'],
				'service_id'     => $this->placeholders['{service_id}'],
				'order_link'     => $this->placeholders['{order_link}'],
				'employer_label' => gigneo_employer_singular(),
				'plain_text'     => true,
				'sent_to_admin'  => false,
				'email'          => $this,
			),
			'',
			$this->template_base
		);
	}
}
