import { createContext, useContext } from "react";
import type { ContextType } from "./type.ts";

const Context = createContext<any>(null);

Context.displayName = "AuthContext";

const LoginStateProvider = Context.Provider;

interface InjectProps {
  loginState: ContextType[0];
  setLoginState: ContextType[1];
}

const useLoginState = (): ContextType => {
  const value = useContext(Context);
  return value;
};

// class 组件支持 Hoc 用法
function withLoginState<Props>(Component: React.ComponentType<Props>) {
  const AuthWrapped = (props: Props) => {
    const [loginState, setLoginState] = useLoginState();
    return <Component {...props} auth={loginState} setAuth={setLoginState} />;
  };
  return AuthWrapped;
}

export { useLoginState, withLoginState, LoginStateProvider, InjectProps };
