import {redirectToBouncePage} from '../admin/helpers/redirect-to-bounce-page';
import {RETRY_INVALID_SESSION_HEADER} from '../const';
import {BasicParams} from '../../types';

interface RespondToInvalidSessionTokenParams {
  params: BasicParams;
  request: Request;
  retryRequest?: boolean;
}

export function respondToInvalidSessionToken({
  params,
  request,
  retryRequest = false,
}: RespondToInvalidSessionTokenParams) {
  const {api, logger, config} = params;

  const isDocumentRequest = !request.headers.get('authorization');
  if (isDocumentRequest) {
    return redirectToBouncePage({api, logger, config}, new URL(request.url));
  }

  throw new Response(undefined, {
    status: 401,
    statusText: 'Unauthorized',
    headers: retryRequest ? RETRY_INVALID_SESSION_HEADER : {},
  });
}
