<?php
/**
 * WooCommerce statuslerini yöneten GCARGO_WC_Stataus_Manager sınıfını barındıran dosya.
 *
 * @package GurmeHub
 */

/**
 * GCARGO_WC_Stataus_Manager sınıfı
 */
class GCARGO_WC_Status_Manager {

	/**
	 * Yeni durumlar
	 *
	 * @var array
	 */
	private $new_wc_status_keys = [
		'wc-gcargo-ready',
		'wc-gcargo-shipped',
		'wc-gcargo-on-transit',
		'wc-gcargo-dlvr',
		'wc-gcargo-in-courier',
		'wc-gcargo-dlvrd',
	];

	/**
	 *  GCargo ya ait tüm gönderi durumların tanimları döndürür
	 */
	private function get_new_wc_statuses() {

		$status = gcargo_get_shipment_statuses();

		return array(
			'wc-gcargo-ready'      => 'Kargo ' . $status['non_processed'],
			'wc-gcargo-shipped'    => 'Kargo ' . $status['shipped'],
			'wc-gcargo-on-transit' => 'Kargo ' . $status['on_transit'],
			'wc-gcargo-dlvr'       => 'Kargo ' . $status['at_delivery_center'],
			'wc-gcargo-in-courier' => 'Kargo ' . $status['in_courier'],
			'wc-gcargo-dlvrd'      => 'Kargo ' . $status['delivered'],
		);
	}

	/**
	 * Durumlar için textleri bulur.
	 *
	 * @param string $status Durum adı
	 *
	 * @return string Durum için text
	 */
	private function get_status_text( $status ) {
		$new_satuses = $this->get_new_wc_statuses();
		return isset( $new_satuses[ $status ] ) ? $new_satuses[ $status ] : '';
	}

	/**
	 * WooCommerce Siparişlerini Döndürür.
	 *
	 * @return array
	 */
	public function get_merged_statuses_for_frontend() {
		$wc_order_status = wc_get_order_statuses();
		$all_statuses    = array();

		foreach ( $wc_order_status as $key => $status ) {

			$unwanted = array_merge(
				[ 'wc-failed', 'wc-checkout-draft' , 'wc-cancelled' , 'wc-refunded', 'wc-on-hold', 'wc-pending' ],
				$this->new_wc_status_keys
			);

			if ( in_array( $key, $unwanted, true ) ) {
				continue;
			}

			$all_statuses[] = array(
				'key'  => $key,
				'text' => $status,
			);
		}

		foreach ( $this->get_new_wc_statuses() as $key => $status ) {
			$all_statuses[] = array(
				'key'  => $key,
				'text' => $status,
			);
		}

		return $all_statuses;
	}


	/**
	 * Callback of wc_order_statuses
	 *
	 * @param array $wc_statuses WooCommerce order statuses
	 *
	 * @return array
	 */
	public function callback_order_statuses( $wc_statuses ) {

		foreach ( gcargo_wc_order_status_settings()->get_settings() as $status ) {
			if ( in_array( $status->status, $this->new_wc_status_keys ) ) {
				$wc_statuses[ $status->status ] = $this->get_status_text( $status->status );
			}
		}

		return $wc_statuses;
	}

	/**
	 * Callback of woocommerce_register_shop_order_post_statuses.
	 *
	 * @param array $wc_statuses WooCommerce order statuses
	 */
	public function callback_shop_order_post_statuses( $wc_statuses ) {

		$defaults = [
			'public'                    => false,
			'exclude_from_search'       => false,
			'show_in_admin_all_list'    => true,
			'show_in_admin_status_list' => true,
		];

		foreach ( gcargo_wc_order_status_settings()->get_settings() as $status ) {

			if ( ! $status->active ) {
				continue;
			}

			if ( 'wc-gcargo-ready' === $status->status ) {
				$wc_statuses[ $status->status ] = array_merge(
					$defaults,
					array(
						'label'       => 'Kargo Gönderime Hazır',
						/* translators: %s: number of posts */
						'label_count' => _n_noop( 'Kargo Gönderime Hazır <span class="count">(%s)</span>', 'Kargo Gönderime Hazır <span class="count">(%s)</span>', 'kargo-entegrator' ),
					)
				);
			}

			if ( 'wc-gcargo-shipped' === $status->status ) {
				$wc_statuses[ $status->status ] = array_merge(
					$defaults,
					array(
						'label'       => 'Kargo Yola Çıktı',
						/* translators: %s: number of posts */
						'label_count' => _n_noop( 'Kargo Yola Çıktı <span class="count">(%s)</span>', 'Kargo Yola Çıktı <span class="count">(%s)</span>', 'kargo-entegrator' ),
					)
				);
			}

			if ( 'wc-gcargo-on-transit' === $status->status ) {
				$wc_statuses[ $status->status ] = array_merge(
					$defaults,
					array(
						'label'       => 'Kargo Taşıma Sürecinde',
						/* translators: %s: number of posts */
						'label_count' => _n_noop( 'Kargo Taşıma Sürecinde <span class="count">(%s)</span>', 'Kargo Taşıma Sürecinde <span class="count">(%s)</span>', 'kargo-entegrator' ),
					)
				);
			}

			if ( 'wc-gcargo-dlvr' === $status->status ) {
				$wc_statuses[ $status->status ] = array_merge(
					$defaults,
					array(
						'label'       => 'Kargo Dağıtım Merkezinde',
						/* translators: %s: number of posts */
						'label_count' => _n_noop( 'Kargo Dağıtım Merkezinde <span class="count">(%s)</span>', 'Kargo Dağıtım Merkezinde <span class="count">(%s)</span>', 'kargo-entegrator' ),
					)
				);
			}

			if ( 'wc-gcargo-in-courier' === $status->status ) {
				$wc_statuses[ $status->status ] = array_merge(
					$defaults,
					array(
						'label'       => 'Kargo Dağıtıma Çıktı',
						/* translators: %s: number of posts */
						'label_count' => _n_noop( 'Kargo Dağıtıma Çıktı <span class="count">(%s)</span>', 'Kargo Dağıtıma Çıktı <span class="count">(%s)</span>', 'kargo-entegrator' ),
					)
				);
			}

			if ( 'wc-gcargo-dlvrd' === $status->status ) {
				$wc_statuses[ $status->status ] = array_merge(
					$defaults,
					array(
						'label'       => 'Kargo Teslim Edildi',
						/* translators: %s: number of posts */
						'label_count' => _n_noop( 'Kargo Teslim Edildi <span class="count">(%s)</span>', 'Kargo Teslim Edildi <span class="count">(%s)</span>', 'kargo-entegrator' ),
					)
				);
			}
		}
		return $wc_statuses;
	}
}
