<?php
// phpcs:disable Wptopr.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.

namespace Wptopr\WP\SEO\MyWptopr_Client\Application\Ports;

use Wptopr\WP\SEO\MyWptopr_Client\Application\Exceptions\Token_Storage_Exception;
use Wptopr\WP\SEO\MyWptopr_Client\Domain\Token_Set;

/**
 * Port for per-user token persistence.
 */
interface User_Token_Storage_Interface {

	/**
	 * Retrieves the stored token set for a user.
	 *
	 * @param int $user_id The user ID.
	 *
	 * @return Token_Set|null The token set, or null if not stored.
	 */
	public function get( int $user_id ): ?Token_Set;

	/**
	 * Stores a token set for a user.
	 *
	 * @param int       $user_id   The user ID.
	 * @param Token_Set $token_set The token set to store.
	 *
	 * @return void
	 *
	 * @throws Token_Storage_Exception If storage fails.
	 */
	public function store( int $user_id, Token_Set $token_set ): void;

	/**
	 * Deletes the stored token set for a user.
	 *
	 * @param int $user_id The user ID.
	 *
	 * @return void
	 */
	public function delete( int $user_id ): void;

	/**
	 * Deletes all stored user token sets.
	 *
	 * @return void
	 */
	public function delete_all(): void;
}
