import { createContext, useEffect, useState } from 'react';
import api from '../api';
import { AuthState, User } from '../types';

export const useAuth = () => {
  const [authState, setAuthState] = useState<AuthState>(AuthState.Initializing);
  const [user, setUser] = useState<User | null>(null);

  useEffect(() => {
    if (authState === AuthState.Initializing) {
      setAuthState(AuthState.Fetching);
      api.whoami().then((response) => {
        if (response.user) {
          console.log(response.user);
          setUser(response.user);
          setAuthState(AuthState.LoggedIn);
        } else {
          setAuthState(AuthState.LoggedOut);
        }
      }).catch((error) => {
        console.error(error);
      });
    }
  }, [authState, setAuthState, user, setUser]);

  return {
    loginUrl: window.location.href.includes('localhost') ? 'http://localhost:3001/auth/github' : 'https://wavtool.com/auth/github',
    state: authState,
    user
  } as {
    loginUrl: string,
    state: AuthState.LoggedOut | AuthState.Fetching | AuthState.Initializing,
    user: null,
  } | {
    loginUrl: string,
    state: AuthState.LoggedIn,
    user: User,
  }
}

export const AuthContext = createContext<ReturnType<typeof useAuth>>(undefined as never);
