<?php
/**
 * Bu dosya "gcargo_" prefixli yardımcı fonksiyonları barındırır.
 *
 * @package GurmeHub
 */

/**
 * GurmeCargo için görünüm dosyasını getirir.
 *
 * @param string $view_name Dahil edilecek görünüm.
 * @param array  $args Görünüm içerisinde kullanılacak veriler.
 * @param string $view_path Görünüm klasör yolu.
 *
 * @return void
 */
function gcargo_get_view( $view_name, $args = array(), $view_path = GCARGO_PLUGIN_DIR_PATH ) {
	if ( ! empty( $args ) && is_array( $args ) ) {
		extract( $args ); //phpcs:ignore  WordPress.PHP.DontExtract.extract_extract
	}
	$view = $view_path . '/views/' . $view_name;
	include $view;
}


/**
 * Veri temizleme işlemi. sanitize_text_field fonksiyonunu kullanır.
 * Gönderilen parametre dizi ise (array) her elemanını için tekrar kendini çağırır.
 *
 * @param mixed $varible Temizlenecek veri.
 *
 * @return mixed
 */
function gcargo_clean( $varible ) {
	if ( is_array( $varible ) ) {
		return array_map( 'gcargo_clean', $varible );
	}
	return is_scalar( $varible ) ? sanitize_text_field( wp_unslash( $varible ) ) : $varible;
}

/**
 * Kullanıcıya göre yetki tanımı.
 *
 * @return string $role;
 */
function gcargo_capability() {
	return apply_filters( 'gcargo_capability', 'manage_woocommerce' );
}

/**
 *  GCargo ya ait tüm gönderi durumların tanimları döndürür
 */
function gcargo_get_shipment_statuses() {
	return array(
		'non_processed'      => 'Gönderime Hazır',
		'shipped'            => 'Yola Çıktı',
		'on_transit'         => 'Taşıma Sürecinde',
		'at_delivery_center' => 'Dağıtım Merkezinde',
		'in_courier'         => 'Dağıtıma Çıktı',
		'delivered'          => 'Teslim Edildi',
	);
}

/**
 *  GCargo ya ait tüm gönderi durumların tanimları döndürür
 */
function gcargo_get_order_post_status_map() {
	return array(
		'non_processed'      => 'wc-gcargo-ready',
		'shipped'            => 'wc-gcargo-shipped',
		'on_transit'         => 'wc-gcargo-on-transit',
		'at_delivery_center' => 'wc-gcargo-dlvr',
		'in_courier'         => 'wc-gcargo-in-courier',
		'delivered'          => 'wc-gcargo-dlvrd',
	);
}

/**
 *  GCargo ya ait tüm gönderi durumların tanimları döndürür
 */
function gcargo_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'],
	);
}


/**  GCargo otomatik gönderi oluşturmak için kullanılan sipariş durumları.
 */
function gcargo_auto_shipment_statuses() {
	return apply_filters(
		'gcargo_auto_shipment_statuses',
		array(
			array(
				'text'  => 'Hazırlanıyor',
				'value' => 'processing',
			),
			array(
				'text'  => 'Tamamlandı',
				'value' => 'completed',
			),
		)
	);
}

/**
 *  GCargo otomatik gönderi oluşturmak kullanılan timeout verileri.
 */
function gcargo_auto_shipment_timeouts() {
	return apply_filters(
		'gcargo_auto_shipment_timeouts',
		array(
			array(
				'text'  => 'Hemen',
				'value' => 0,
			),
			array(
				'text'  => '5 Dakika',
				'value' => 300,
			),
			array(
				'text'  => '15 Dakika',
				'value' => 900,
			),
			array(
				'text'  => '45 Dakika',
				'value' => 2700,
			),
			array(
				'text'  => '2 Saat',
				'value' => 7200,
			),
			array(
				'text'  => '6 Saat',
				'value' => 21600,
			),
		)
	);
}

/**
 *  GCargo seçeneklerini eşitlemek için kullanılan fonksiyon.
 */
function gcargo_sync_options() {
	$current_time       = current_time( 'mysql' );
	$warehouses         = gcargo_warehouses_resource()->index();
	$cargo_integrations = gcargo_cargo_integrations_resource()->index();
	$shipment_setting   = gcargo_api_requests()->get_shipment_setting();
	$returned_setting   = gcargo_api_requests()->get_returned_setting();
	gcargo_saas_warehouses_settings()->update_settings( $warehouses );
	gcargo_saas_cargo_integrations_settings()->update_settings( $cargo_integrations );
	gcargo_saas_shipment_settings()->update_settings( $shipment_setting );
	gcargo_saas_returned_settings()->update_settings( $returned_setting );

	update_option( 'gcargo_sync_last_update', $current_time, false );
	return array(
		'warehouses'         => $warehouses,
		'cargo_integrations' => $cargo_integrations,
		'shipment_setting'   => $shipment_setting,
		'returned_setting'   => $returned_setting,
		'last_sync'          => $current_time,
	);
}

/**
 *  GCARGO son sync zamanını döndürür.
 */
function gcargo_get_last_sync_time() {
	return get_option( 'gcargo_sync_last_update' );
}


/**
 *  GCARGO  gönderi oluşturmak için kullanılan sipariş durumları.
 */
function gcargo_get_unwanted_order_statuses() {
	return apply_filters(
		'gcargo_get_unwanted_order_statuses',
		[ 'cancelled', 'refunded', 'on-hold', 'failed', 'pending' ]
	);
}
