import Axios, { AxiosRequestConfig } from 'axios';
import { UserResponse } from './types';

type MeQuery = () => Promise<UserResponse>;
type LogoutQuery = () => Promise<any>;

export type AuthClient = {
  me: MeQuery;
  logout: LogoutQuery;
};

export function auth(config: AxiosRequestConfig): AuthClient {
  const axios = Axios.create({
    ...config,
    baseURL: `${config.baseURL}/api/v1/`,
  });

  const me: MeQuery = async (): Promise<UserResponse> => {
    return (await axios.get<UserResponse>('/users/me')).data;
  };

  const logout: LogoutQuery = async (): Promise<any> => {
    return (await axios.get<any>('/logout')).data;
  };

  return {
    me,
    logout,
  };
}