<?php
namespace Saltus\WP\Framework\Infrastructure\Service;

use Saltus\WP\Framework\Exception\SaltusFrameworkThrowable;
use InvalidArgumentException;

class Invalid
	extends InvalidArgumentException
	implements SaltusFrameworkThrowable {

	/**
	 * Create a new instance of the exception for a service class name that is
	 * not recognized.
	 *
	 * @param string|object $service Class name of the service that was not
	 *                               recognized.
	 *
	 * @return static
	 */
	public static function from_service( $service ) {
		$message = \sprintf(
			'The service "%s" is not recognized and cannot be registered.',
			\is_object( $service )
				? \get_class( $service )
				: (string) $service
		);

		return new static( $message );
	}

	/**
	 * Create a new instance of the exception for a service identifier that is
	 * not recognized.
	 *
	 * @param string $service_id Identifier of the service that is not being
	 *                           recognized.
	 *
	 * @return static
	 */
	public static function from_service_id( string $service_id ) {
		$message = \sprintf(
			'The service ID "%s" is not recognized and cannot be retrieved.',
			$service_id
		);

		return new static( $message );
	}
}
