import {Session} from '@shopify/shopify-api';

import {BasicParams} from '../../types';

import type {StorefrontContext} from '.';

export function storefrontClientFactory({
  params,
  session,
}: {
  params: BasicParams;
  session: Session;
}): StorefrontContext {
  const {api} = params;

  return {
    graphql: async (query, options = {}) => {
      const client = new api.clients.Storefront({
        session,
        apiVersion: options.apiVersion,
      });

      const apiResponse = await client.request(query, {
        variables: options?.variables,
        retries: options?.tries ? options.tries - 1 : 0,
        headers: options?.headers,
      });

      return new Response(JSON.stringify(apiResponse));
    },
  };
}
