<?php

declare(strict_types=1);

namespace Automattic\WooCommerce\Api\Infrastructure;

/**
 * Default principal resolver for the WooCommerce dual code+GraphQL API.
 *
 * Plugins that implement their own API and authenticate against something
 * other than WordPress users (e.g. an app token) must ship their own resolver
 * at `<plugin-api-namespace>\Infrastructure\PrincipalResolver` with a
 * `resolve_principal( \WP_REST_Request ): T` (or zero-arg) method whose
 * return type is the plugin's own principal class. ApiBuilder detects it
 * during generation and routes the autogenerated controller through it.
 *
 * The \WP_REST_Request parameter is optional; the default resolver doesn't
 * inspect headers (WordPress's auth pipeline has already populated the global
 * current user by the time this fires).
 */
final class PrincipalResolver {
	/**
	 * Resolve the request principal.
	 *
	 * Anonymous requests are signalled by a Principal whose underlying
	 * `WP_User` has `ID === 0` (see {@see Principal::is_authenticated()}).
	 */
	public function resolve_principal(): Principal {
		return new Principal( wp_get_current_user() );
	}
}
