import SupersetClientClass from './SupersetClientClass';
import { SupersetClientInterface } from './types';

let singletonClient: SupersetClientClass | undefined;

function getInstance(): SupersetClientClass {
  if (!singletonClient) {
    throw new Error('You must call SupersetClient.configure(...) before calling other methods');
  }
  return singletonClient;
}

const SupersetClient: SupersetClientInterface = {
  configure: config => {
    singletonClient = new SupersetClientClass(config);
    return singletonClient;
  },
  reset: () => {
    singletonClient = undefined;
  },
  getInstance,
  delete: request => getInstance().delete(request),
  get: request => getInstance().get(request),
  init: force => getInstance().init(force),
  isAuthenticated: () => getInstance().isAuthenticated(),
  post: request => getInstance().post(request),
  put: request => getInstance().put(request),
  reAuthenticate: () => getInstance().reAuthenticate(),
  request: request => getInstance().request(request),
};

export default SupersetClient;
