<?php

namespace WKO\Controllers\Emails;

defined('ABSPATH') || exit;

/**
 * Name: AwaitingAnalysisOrderEmail
 * Custom email for awaiting-analysis order status
 * @package Controllers\Emails
 * @since 1.0.0
 */
class AwaitingAnalysisOrderEmail extends \WC_Email
{
    /**
     * Constructor.
     */
    public function __construct()
    {
        $this->id             = 'customer_awaiting_analysis_order';
        $this->customer_email = true;
        $this->title          = __('Awaiting Analysis Order', 'wc-koin-official');
        $this->description    = __('This email is sent to customers when their order is under analysis.', 'wc-koin-official');
        $this->template_html  = 'emails/customer-awaiting-analysis-order.php';
        $this->template_plain = 'emails/plain/customer-awaiting-analysis-order.php';
        $this->template_base  = WP_PLUGIN_DIR . '/wc-koin-official/app/Views/templates/';
        $this->placeholders   = [
            '{order_date}'   => '',
            '{order_number}' => '',
        ];

        add_action('woocommerce_order_status_cancelled_to_awaiting-analysis_notification', [$this, 'trigger'], 10, 2);
        add_action('woocommerce_order_status_failed_to_awaiting-analysis_notification', [$this, 'trigger'], 10, 2);
        add_action('woocommerce_order_status_on-hold_to_awaiting-analysis_notification', [$this, 'trigger'], 10, 2);
        add_action('woocommerce_order_status_pending_to_awaiting-analysis_notification', [$this, 'trigger'], 10, 2);
        add_action('woocommerce_order_status_processing_to_awaiting-analysis_notification', [$this, 'trigger'], 10, 2);

        parent::__construct();
    }

    /**
     * Get email subject.
     *
     * @since 1.0.0
     * @return string
     */
    public function get_default_subject()
    {
        return __('Your {site_title} order has been received', 'wc-koin-official');
    }

    /**
     * Get email heading.
     *
     * @since 1.0.0
     * @return string
     */
    public function get_default_heading()
    {
        return __('Thank you for your order', 'wc-koin-official');
    }

    /**
     * Trigger the sending of this email.
     *
     * @param int            $order_id The order ID.
     * @param WC_Order|false $order Order object.
     */
    public function trigger($order_id, $order = false)
    {
        $this->setup_locale();

        if ($order_id && !is_a($order, 'WC_Order')) {
            $order = wc_get_order($order_id);
        }

        if (is_a($order, 'WC_Order')) {
            $this->object                         = $order;
            $this->recipient                      = $this->object->get_billing_email();
            $this->placeholders['{order_date}']   = wc_format_datetime($this->object->get_date_created());
            $this->placeholders['{order_number}'] = $this->object->get_order_number();
        }

        if ($this->is_enabled() && $this->get_recipient()) {
            $this->send(
                $this->get_recipient(),
                $this->get_subject(),
                $this->get_content(),
                $this->get_headers(),
                $this->get_attachments()
            );
        }

        $this->restore_locale();
    }

    /**
     * Get content html.
     *
     * @return string
     */
    public function get_content_html()
    {
        return wc_get_template_html(
            $this->template_html,
            [
                'order'              => $this->object,
                'email_heading'      => $this->get_heading(),
                'additional_content' => $this->get_additional_content(),
                'sent_to_admin'      => false,
                'plain_text'         => false,
                'email'              => $this,
            ],
            '',
            $this->template_base
        );
    }

    /**
     * Get content plain.
     *
     * @return string
     */
    public function get_content_plain()
    {
        return wc_get_template_html(
            $this->template_plain,
            [
                'order'              => $this->object,
                'email_heading'      => $this->get_heading(),
                'additional_content' => $this->get_additional_content(),
                'sent_to_admin'      => false,
                'plain_text'         => true,
                'email'              => $this,
            ],
            '',
            $this->template_base
        );
    }

    /**
     * Default content to show below main email content.
     *
     * @since 1.0.0
     * @return string
     */
    public function get_default_additional_content()
    {
        return __('We will notify you once your payment has been confirmed.', 'wc-koin-official');
    }
}
