<?php
namespace Gigneo\Emails;

use WC_Email;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

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

	/**
	 * Sets up email metadata, templates, placeholders, and recipient.
	 *
	 * @since 0.0.1
	 */
	public function __construct() {
		$this->id             = 'gigneo_job_revision';
		$this->title          = esc_html__( 'Gigneo - Job order revision requested', 'gigneo' );
		$this->description    = esc_html__( 'This email is sent to the freelancer when the employer requests a revision.', 'gigneo' );
		$this->template_html  = 'email/job-order-revision.php';
		$this->template_plain = 'email/plain/job-order-revision.php';
		$this->template_base  = GIGNEO_DIR_PATH . 'templates/';
		$this->customer_email = true;
		$this->placeholders   = array(
			'{recipient_name}'  => 'John Doe',
			'{employer_name}'   => 'Jane Smith',
			'{job_title}'       => 'Professional Web Developer',
			'{job_id}'          => '123',
			'{order_id}'        => '456',
			'{order_link}'      => '#',
			'{revision_reason}' => 'Please update the color scheme to match the brand guide.',
		);
		parent::__construct();
	}

	/**
	 * Trigger the email.
	 *
	 * @param int $freelancer_profile_id Freelancer Profile ID.
	 * @param int $order_id              Order ID.
	 *
	 * @since 0.0.1
	 */
	public function trigger( $freelancer_profile_id, $order_id ) {

		$order_id           = absint( $order_id );
		$freelancer_user_id = get_post_field( 'post_author', $freelancer_profile_id );
		$freelancer         = get_userdata( $freelancer_user_id );
		$freelancer_name    = gigneo_profile_name( $freelancer_profile_id );

		$employer_profile_id = gigneo_post_meta( $order_id, '_gigneo_pm_profile_id' );
		$employer_name       = gigneo_profile_name( $employer_profile_id );

		$job_id     = gigneo_post_meta( $order_id, '_gigneo_pm_job_id' );
		$job_title  = gigneo_post_meta( $order_id, '_gigneo_pm_job_title' );
		$order_link = gigneo_dashboard_url( 'order', 'job-detail', array( 'p_id' => $order_id ) );

		$revision_id     = gigneo_post_meta( $order_id, '_gigneo_pm_revision_activity' );
		$revision_reason = '';
		if ( ! empty( $revision_id ) ) {
			$revisions       = get_comment_meta( $revision_id, '_gigneo_cm_revision_info', true );
			$revision_reason = ! empty( $revisions['description'] ) ? $revisions['description'] : '';
		}

		if ( $freelancer ) {
			$this->recipient                         = $freelancer->user_email;
			$this->placeholders['{recipient_name}']  = $freelancer_name ?? '';
			$this->placeholders['{employer_name}']   = $employer_name ?? '';
			$this->placeholders['{job_title}']       = $job_title ?? '';
			$this->placeholders['{order_link}']      = $order_link ?? '';
			$this->placeholders['{job_id}']          = $job_id;
			$this->placeholders['{order_id}']        = $order_id;
			$this->placeholders['{revision_reason}'] = $revision_reason;

			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__( 'Revision requested for your job - {job_title}', 'gigneo' );
	}

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

	/**
	 * Renders the HTML email body from the template.
	 *
	 * @since 0.0.1
	 *
	 * @return string
	 */
	public function get_content_html() {
		return wc_get_template_html(
			$this->template_html,
			array(
				'email_heading'   => $this->get_heading(),
				'recipient_name'  => $this->placeholders['{recipient_name}'],
				'employer_name'   => $this->placeholders['{employer_name}'],
				'job_title'       => $this->placeholders['{job_title}'],
				'order_id'        => $this->placeholders['{order_id}'],
				'job_id'          => $this->placeholders['{job_id}'],
				'order_link'      => $this->placeholders['{order_link}'],
				'revision_reason' => $this->placeholders['{revision_reason}'],
				'employer_label'  => gigneo_employer_singular(),
				'plain_text'      => false,
				'sent_to_admin'   => false,
				'email'           => $this,
			),
			'',
			$this->template_base
		);
	}

	/**
	 * Renders the plain-text email body from the template.
	 *
	 * @since 0.0.1
	 *
	 * @return string
	 */
	public function get_content_plain() {
		return wc_get_template_html(
			$this->template_plain,
			array(
				'email_heading'   => $this->get_heading(),
				'recipient_name'  => $this->placeholders['{recipient_name}'],
				'employer_name'   => $this->placeholders['{employer_name}'],
				'job_title'       => $this->placeholders['{job_title}'],
				'order_id'        => $this->placeholders['{order_id}'],
				'job_id'          => $this->placeholders['{job_id}'],
				'order_link'      => $this->placeholders['{order_link}'],
				'revision_reason' => $this->placeholders['{revision_reason}'],
				'employer_label'  => gigneo_employer_singular(),
				'plain_text'      => true,
				'sent_to_admin'   => false,
				'email'           => $this,
			),
			'',
			$this->template_base
		);
	}
}
