<?php
/**
 * Shipping Zone Data Store Interface
 *
 * @version 3.0.0
 * @package WooCommerce/Interface
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * WC Shipping Zone Data Store Interface.
 *
 * Functions that must be defined by shipping zone store classes.
 *
 * @version  3.0.0
 */
interface WC_Shipping_Zone_Data_Store_Interface {
	/**
	 * Get a list of shipping methods for a specific zone.
	 *
	 * @param  int  $zone_id Zone ID.
	 * @param  bool $enabled_only True to request enabled methods only.
	 * @return array Array of objects containing method_id, method_order, instance_id, is_enabled
	 */
	public function get_methods( $zone_id, $enabled_only );

	/**
	 * Get count of methods for a zone.
	 *
	 * @param int $zone_id Zone ID.
	 * @return int Method Count
	 */
	public function get_method_count( $zone_id );

	/**
	 * Add a shipping method to a zone.
	 *
	 * @param int    $zone_id Zone ID.
	 * @param string $type Method Type/ID.
	 * @param int    $order Method Order ID.
	 * @return int Instance ID
	 */
	public function add_method( $zone_id, $type, $order );

	/**
	 * Delete a method instance.
	 *
	 * @param int $instance_id Intance ID.
	 */
	public function delete_method( $instance_id );

	/**
	 * Get a shipping zone method instance.
	 *
	 * @param int $instance_id Instance ID.
	 * @return object
	 */
	public function get_method( $instance_id );

	/**
	 * Find a matching zone ID for a given package.
	 *
	 * @param object $package Zone package object.
	 * @return int
	 */
	public function get_zone_id_from_package( $package );

	/**
	 * Return an ordered list of zones.
	 *
	 * @return array An array of objects containing a zone_id, zone_name, and zone_order.
	 */
	public function get_zones();

	/**
	 * Return a zone ID from an instance ID.
	 *
	 * @param int $id Instance ID.
	 * @return int
	 */
	public function get_zone_id_by_instance_id( $id );
}
