import { postToParEndpoint } from '../endpoints';
import { OktaAuthOAuthInterface, TokenParams } from '../types';

export async function preparePAR(sdk: OktaAuthOAuthInterface, tokenParams: TokenParams) {
	const { jwtAuthorizationRequest, pushAuthorizationRequest, pushAuthorizationUrl } = sdk?.options || {};

	if (!tokenParams?.clientAssertion && pushAuthorizationRequest) {
		const now = Math.floor(Date.now() / 1000);

		const { clientAssertion, expiresAt, requestUri } = await postToParEndpoint(
			sdk,
			{
				pushAuthorizationUrl,
				jwtAuthorizationRequest,
				...tokenParams
			});

		if (requestUri && expiresAt > now) {
			tokenParams['requestUri'] = requestUri;
		}

		if (clientAssertion) {
			tokenParams['clientAssertion'] = clientAssertion;
		}
	}

	return tokenParams;
}