import { useState } from "react";
import { GameProvider } from "./context/GameContext.js";
import { GameLayout } from "./components/game/GameLayout.js";
import { LoginPage } from "./components/game/LoginPage.js";

const handleAuthCallback = (): boolean => {
  if (window.location.pathname !== "/auth/callback") {
    return false;
  }

  const params = new URLSearchParams(window.location.search);
  const token = params.get("token");

  if (token) {
    localStorage.setItem("elysium_token", token);
  }

  window.history.replaceState(null, "", "/");
  return Boolean(token);
};

const isAuthenticated = (): boolean => {
  const fromCallback = handleAuthCallback();
  return fromCallback || Boolean(localStorage.getItem("elysium_token"));
};

export const App = (): React.JSX.Element => {
  const [loggedIn, setLoggedIn] = useState(isAuthenticated);

  if (!loggedIn) {
    return <LoginPage onLogin={() => { setLoggedIn(true); }} />;
  }

  return (
    <GameProvider>
      <GameLayout />
    </GameProvider>
  );
};
