import { createSignal, createContext, useContext, ParentProps, Accessor } from "solid-js";
interface UserInfoActions {
  setUser(user: Whoami): void;
  clearUser(): void;
}
const UserInfoContext = createContext<[Accessor<Whoami | undefined>, UserInfoActions]>();
export interface Whoami {
  logoutTime: string;
  roles: string[] | undefined;
  userId: number;
}
interface ProviderProps {
  whoami?: Whoami;
}
export function UserInfoProvider(props: ParentProps<ProviderProps>) {
  const [userInfo, setUserInfo] = createSignal(props.whoami);
  const wrappedValue: [Accessor<Whoami | undefined>, UserInfoActions] = [
    userInfo,
    {
      setUser(user: Whoami) {
        setUserInfo(user);
      },
      clearUser() {
        setUserInfo();
      }
    }
  ];
  return (
    <UserInfoContext.Provider value={wrappedValue}>
      {props.children}
    </UserInfoContext.Provider>
  );
}
export function useUserInfo() { return useContext(UserInfoContext); }
export function loadUserInfo(): Whoami | undefined {
  const userInfoString = localStorage.getItem("ALLREDLIB_USERINFO");
  if (userInfoString === "" || userInfoString === null) {
    return undefined;
  }
  const userInfo = JSON.parse(userInfoString)
  if (!userInfo || !userInfo.userId || !userInfo.logoutTime) {
    return undefined
  }
  
  return userInfo
}