<?php declare( strict_types=1 );

namespace TEC\Common\LiquidWeb\Harbor\Http;

use TEC\Common\LiquidWeb\Harbor\Consent\Consent_Repository;
use TEC\Common\LiquidWeb\LicensingApiClientWordPress\Http\WordPressHttpClient;
use TEC\Common\LiquidWeb\Harbor\Http\Null_Client;
use TEC\Common\Nyholm\Psr7\Factory\Psr17Factory;
use TEC\Common\Psr\Http\Client\ClientInterface;
use TEC\Common\Psr\Http\Message\RequestFactoryInterface;
use TEC\Common\Psr\Http\Message\StreamFactoryInterface;
use TEC\Common\LiquidWeb\Harbor\Contracts\Abstract_Provider;

/**
 * Registers shared PSR-17 HTTP message factories in the DI container.
 *
 * @since 1.0.0
 */
final class Provider extends Abstract_Provider {

	/**
	 * @inheritDoc
	 */
	public function register(): void {
		$this->container->singleton(
			ClientInterface::class,
			function (): ClientInterface {
				if ( ! $this->container->get( Consent_Repository::class )->has_consent() ) {
					return new Null_Client();
				}

				return new WordPressHttpClient();
			}
		);
		$this->container->singleton( Psr17Factory::class );
		$this->container->singleton( RequestFactoryInterface::class, Psr17Factory::class );
		$this->container->singleton( StreamFactoryInterface::class, Psr17Factory::class );
	}
}
