<?php

use TEC\Common\Contracts\Service_Provider;


/**
 * Class Tribe__Events__Aggregator__REST__V1__Service_Provider
 *
 * Provides the Event Aggregator batch process support functionality.
 *
 * @since 4.6.15
 */
class Tribe__Events__Aggregator__REST__V1__Service_Provider extends Service_Provider {


	/**
	 * Binds and sets up implementations.
	 */
	public $namespace;

	/**
	 * Registers the classes and functionality needed to support batch imports.
	 *
	 * @since 4.6.15
	 */
	public function register() {
		tribe_singleton( 'events-aggregator.rest-api.v1.endpoints.batch', 'Tribe__Events__Aggregator__REST__V1__Endpoints__Batch' );
		tribe_singleton( 'events-aggregator.rest-api.v1.endpoints.state', 'Tribe__Events__Aggregator__REST__V1__Endpoints__State' );

		add_action( 'rest_api_init', [ $this, 'register_endpoints' ] );
	}

	/**
	 * Registers the REST API endpoints needed to support batch imports.
	 *
	 * @since 4.6.15
	 */
	public function register_endpoints() {
		/** @var Tribe__REST__Endpoints__CREATE_Endpoint_Interface $batch_endpoint */
		$batch_endpoint = tribe( 'events-aggregator.rest-api.v1.endpoints.batch' );
		/** @var Tribe__REST__Endpoints__CREATE_Endpoint_Interface $batch_endpoint */
		$state_endpoint = tribe( 'events-aggregator.rest-api.v1.endpoints.state' );

		$this->namespace = 'tribe/event-aggregator/v1';

		register_rest_route(
			$this->namespace,
			'/import/(?P<import_id>\w+)/batch',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'args'                => $batch_endpoint->CREATE_args(),
				'permission_callback' => [ $batch_endpoint, 'can_create' ],
				'callback'            => [ $batch_endpoint, 'create' ],
			]
		);

		register_rest_route(
			$this->namespace,
			'/import/(?P<import_id>\w+)/state',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'args'                => $state_endpoint->CREATE_args(),
				'permission_callback' => [ $state_endpoint, 'can_create' ],
				'callback'            => [ $state_endpoint, 'create' ],
			]
		);
	}
}
