import { GraphQLClient } from 'graphql-request';
import { getSdk, Sdk } from './graphql/generated/gqlTypes';
import { KanaGroupClientFullConfig } from './KanaGroupClientConfig';

export type GQLSdk = Sdk;

export const createGQLSdk = (config: KanaGroupClientFullConfig): GQLSdk => {
  const headers: Record<string, string> = {
    ['X-API-Version']: config.version,
    ['X-Library-Source']: 'client-js',
  };

  if (config.type === 'GroupToken') {
    headers['Authorization'] = `Bearer ${config.groupToken}`;
  } else if (config.type === 'PublicApiKey') {
    headers['Authorization'] = config.apiKey;
    headers['X-Group-ID'] = config.groupId;
  }

  return getSdk(new GraphQLClient(config.endpoint, { headers }));
};
