<?php

/**
 * Created by Vextras.
 *
 * Name: Ryan Hungate
 * Email: ryan@vextras.com
 * Date: 7/13/16
 * Time: 2:32 PM
 */
class MailChimp_WooCommerce_Api {

	protected static $filterable_actions = array(
		'paginate-resource',
	);

	/**
	 * @param int $default_page
	 * @param int $default_per
	 * @return array
	 */
	public static function filter( $default_page = null, $default_per = null ) {
		if ( isset( $_GET['mailchimp-woocommerce'] ) && isset( $_GET['mailchimp-woocommerce']['action'] ) ) {
			if ( in_array( $_GET['mailchimp-woocommerce']['action'], static::$filterable_actions ) ) {
				if ( empty( $default_page ) ) {
					$page = isset( $_GET['page'] ) ? (int) $_GET['page'] : null;
				}
				if ( empty( $default_per ) ) {
					$per = isset( $_GET['per'] ) ? (int) $_GET['per'] : null;
				}
			}
		}

		if ( empty( $page ) ) {
			$page = 1;
		}
		if ( empty( $per ) ) {
			$per = 5;
		}

		return array( $page, $per );
	}

	/**
	 * @param null $page
	 * @param null $per
	 * @return object|stdClass
	 */
	public function paginateProducts( $page = null, $per = null ) {
		return $this->paginate( 'products', $page, $per );
	}

	/**
	 * @param null $page
	 * @param null $per
	 * @return object|stdClass
	 */
	public function paginateOrders( $page = null, $per = null ) {
		return $this->paginate( 'orders', $page, $per );
	}

	/**
	 * @param $resource
	 * @param int      $page
	 * @param int      $per
	 *
	 * @return object|stdClass
	 */
	public function paginate( $resource, $page = 1, $per = 5 ) {
		if ( ( $sync = $this->engine( $resource ) ) ) {
			return $sync->compile( $page, $per );
		}

		return (object) array(
			'endpoint' => $resource,
			'page'     => $page,
			'count'    => 0,
			'stuffed'  => false,
			'items'    => array(),
		);
	}

	/**
	 * @param $resource
	 * @return bool|MailChimp_WooCommerce_Transform_Orders|MailChimp_WooCommerce_Transform_Products|MailChimp_WooCommerce_Transform_Coupons
	 */
	public function engine( $resource ) {
		switch ( $resource ) {
			case 'products':
				return new MailChimp_WooCommerce_Transform_Products();
			case 'orders':
				return new MailChimp_WooCommerce_Transform_Orders();
			case 'coupons':
				return new MailChimp_WooCommerce_Transform_Coupons();
			default:
				return false;
		}
	}
}
