<?php
/**
 * GurmeCargo WooCommerce e-posta gönderme abstract sınıfı
 *
 * @package GurmeHub
 */

/**
 * GurmeCargo GCARGO_Email abstract sınıfı
 */
class GCARGO_Email extends WC_Email {

	/**
	 * Sipariş nesnesi
	 *
	 * @var WC_Order $order Sipariş nesnesi
	 */

	public $order;

	/**
	 * Gönderi verileri
	 *
	 * @var array $shipment_data Kargo Entegratör tarafından gelen gönderi verileri
	 */

	protected $shipment_data;

	/**
	 * E - Posta Sınıfı kurucu fonksiyon.
	 *
	 * @param StdClass $status Kargo durumlarını taşıyan dizi
	 */
	public function __construct( $status ) {

		$gcargo_email = array(
			'non_processed'      => array(
				'text'    => 'Gönderime Hazır',
				'subject' => '#{order_number} Siparişiniz gönderime hazır',
			),

			'shipped'            => array(
				'text'    => 'Yola Çıktı',
				'subject' => '#{order_number} Siparişiniz yola çıktı',
			),
			'on_transit'         => array(
				'text'    => 'Taşıma Sürecinde',
				'subject' => '#{order_number} Siparişiniz taşıma sürecinde',
			),
			'at_delivery_center' => array(
				'text'    => 'Dağıtım Merkezinde',
				'subject' => '#{order_number}  Siparişiniz dağıtım merkezinde',
			),
			'in_courier'         => array(
				'text'    => 'Dağıtıma Çıktı',
				'subject' => '#{order_number} Siparişiniz dağıtıma çıktı',
			),
			'delivered'          => array(
				'text'    => 'Teslim Edildi',
				'subject' => '#{order_number} Siparişiniz başarıyla teslim edildi',
			),
		);

		$this->id             = $status;
		$this->title          = sprintf( '%s - %s', 'Kargo Entegratör', $gcargo_email[ $status ]['text'] );
		$this->subject        = $gcargo_email[ $status ]['subject'];
		$this->heading        = $gcargo_email[ $status ]['subject'];
		$this->customer_email = true;
		$this->template_html  = sprintf( '%s.php', $status );
		$this->template_plain = sprintf( 'plains/%s.php', $status );

		parent::__construct();
	}

	/**
	 * Eklenen e-postların varsayılan olarak deaktif gelmesini sağlayan fonksiyon.
	 */
	public function init_form_fields() {
		parent::init_form_fields();
		$this->form_fields['enabled']['default'] = 'no';
	}

	/**
	 * Child temada şablon var mı kontrol eder varsa child tema dosyası yoksa eklentinin öntanımlı dizinini döndürür.
	 *
	 *  @param string $file_name Kontrol edilecek şablon dosyası
	 *  @return string Şablonun bulunduğu dizin
	 */
	private function get_template_dir( $file_name ) {
		$child_theme = get_stylesheet_directory() . '/gurmecargo/templates/emails/' . $file_name;
		return file_exists( $child_theme ) ? get_stylesheet_directory() . '/gurmecargo/templates/emails/' : GCARGO_PLUGIN_DIR_PATH . 'templates/emails/';
	}
	/**
	 * E-Posta tetiklendiğinde çalışır ve şablondaki e-posta metnini gönderir
	 *
	 * @param string $order_id Sipariş numarası
	 * @param array  $shipment_data SKargo entegratör tarafından gelen gönderi verissi
	 */
	public function trigger( $order_id, $shipment_data ) {

		$this->order         = wc_get_order( $order_id );
		$this->recipient     = $this->order->get_billing_email();
		$this->shipment_data = $shipment_data;

		$this->placeholders = array(
			'{order_number}' => $this->order->get_order_number(),
			'{order_date}'   => wc_format_datetime( $this->order->get_date_created() ),
			'{site_title}'   => get_bloginfo( 'name' ),
			'{site_url}'     => get_site_url(),
			'{site_address}' => get_option( 'woocommerce_store_address' ) . ' ' .
								get_option( 'woocommerce_store_address_2' ) . ', ' .
								get_option( 'woocommerce_store_city' ) . ', ' .
								get_option( 'woocommerce_store_postcode' ),
		);

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



	/**
	 * E-Posta HTML içeriği döndürür
	 *
	 * @return string HTML içeriği
	 */
	public function get_content_html() {

		return wc_get_template_html(
			$this->template_html,
			array(
				'order'              => $this->order,
				'shipments'          => gcargo_shipments()->get_shipments_by_order_id( $this->order->get_id() ),
				'shipment_data'      => $this->shipment_data,
				'email_heading'      => $this->get_heading(),
				'additional_content' => $this->get_additional_content(),
				'sent_to_admin'      => false,
				'plain_text'         => false,
				'email'              => $this,
			),
			$this->get_template_dir( $this->template_html ),
			$this->get_template_dir( $this->template_html )
		);
	}


	/**
	 * E-Posta metin içeriği döndürür
	 *
	 * @return string Metin içeriği
	 */
	public function get_content_plain() {

		return wc_get_template_html(
			$this->template_plain,
			array(
				'order'              => $this->order,
				'email_heading'      => $this->get_heading(),
				'shipments'          => gcargo_shipments()->get_shipments_by_order_id( $this->order->get_id() ),
				'shipment_data'      => $this->shipment_data,
				'additional_content' => $this->get_additional_content(),
				'sent_to_admin'      => false,
				'plain_text'         => true,
				'email'              => $this,
			),
			$this->get_template_dir( $this->template_plain ),
			$this->get_template_dir( $this->template_plain )
		);
	}
}
