/* eslint-disable complexity */
import { createOAuthMeta, prepareTokenParams } from '.';
import { buildAuthorizeParams } from '../endpoints';
import { OktaAuthOAuthInterface, TokenParams } from '../types';

export async function getAuthorizeUrl(sdk: OktaAuthOAuthInterface, options?: TokenParams, url?: string) {

  const tokenParams = await prepareTokenParams(sdk, options);

  const meta = createOAuthMeta(sdk, tokenParams);

  sdk.transactionManager.save(meta);

  if (!url) {
    url = meta.urls.authorizeUrl;
  }

  return url + buildAuthorizeParams(tokenParams);
}