import React, { useEffect } from 'react';
import Landing from './pages/Landing';
import Overview from './pages/Overview';
import Hodl from './pages/Hodl';
import HodlTokens from './pages/HodlTokens';
import { Connect } from '@stacks/connect-react';
import { Link, Router } from '@reach/router';
import Jackpot from './pages/Jackpot';
import AtTwo from './pages/AtTwo';
import Monsters from './pages/Monsters';
import StacksPops from './pages/StacksPops';
import MonsterDetails from './pages/MonsterDetails';
import ClarityValues from './pages/ClarityValues';
import MyProfile from './pages/MyProfile';
import SpeedSpend from './pages/SpeedSpend';
import Marketplace from './pages/Marketplace';
import { NETWORK } from './lib/constants';
import StackingActivies from './pages/StackingActivities';
import Rockets from './pages/Rockets';
import RocketDetails from './pages/RocketDetails';
import Auth from './components/Auth';
import OverviewTokens from './pages/OverviewTokens';
import OverviewContracts from './pages/OverviewContracts';
import OverviewNFTs from './pages/OverviewNFTs';
import PoxLite from './pages/PoxLite';
import { userDataState, userSessionState, useConnect } from './lib/auth';
import { useAtom } from 'jotai';
import PoolRegistry from './pages/PoolRegistry';
import PoolDetails from './pages/PoolDetails';
import OverviewPox from './pages/OverviewPox';
import SendMany from './pages/SendMany';
import PoolAudit from './pages/PoolAudit';
import { Gaia } from './pages/Gaia';
import Swap from './pages/Swap';
import AddressConversion from './pages/AddressConversion';

export default function App(props) {
  const { authOptions } = useConnect();
  const [userSession] = useAtom(userSessionState);
  const [, setUserData] = useAtom(userDataState);
  useEffect(() => {
    if (userSession?.isUserSignedIn()) {
      setUserData(userSession.loadUserData());
    } else if (userSession.isSignInPending()) {
      userSession.handlePendingSignIn();
    }
  }, [userSession, setUserData]);

  return (
    <Connect authOptions={authOptions}>
      <nav className="navbar sticky-top navbar-dark bg-dark text-light">
        <a className="navbar-brand" href="https://testnet.blockstack.org">
          <img src="/stackstestnet.png" alt="Logo" />
        </a>
        <Auth className="ml-auto" userSession={userSession} />
      </nav>

      <Content userSession={userSession} />
    </Connect>
  );
}

const NavLink = props => {
  return (
    <Link
      {...props}
      getProps={({ isCurrent }) => {
        // the object returned here is passed to the
        // anchor element's props
        if (isCurrent) {
          return {
            className: 'nav-item nav-link px-4 active',
          };
        } else {
          return { className: 'nav-item nav-link px-4' };
        }
      }}
    />
  );
};
/*
        <NavLink to="/speed-spend">Speed Spend</NavLink>
        <NavLink to="/stacking">Stacking</NavLink>
        <NavLink to="/hodl">Hodl</NavLink>
        <NavLink to="/hodl-tokens">Hodl Tokens</NavLink>
        <NavLink to="/jackpot">Flip Coin with Jackpot</NavLink>
        <NavLink to="/at-two">Flip Coin at two</NavLink>
        <NavLink to="/monsters">Monsters</NavLink>
        <NavLink to="/openriff">Open Riff</NavLink>
        <NavLink to="/rockets">Rockets</NavLink>
*/
function AppBody(props) {
  return (
    <div>
      <nav className="navbar navbar-expand-md nav-pills nav-justified mx-auto">
        <NavLink to="/">Overview</NavLink>
        <NavLink to="/tokens">Tokens</NavLink>
        <NavLink to="/contracts">Contracts</NavLink>
        <NavLink to="/nfts">NFTs</NavLink>
        <NavLink to="/pox">PoX</NavLink>
        <NavLink to="/me">Profile</NavLink>
      </nav>
      {props.children}
      <div>{NETWORK.coreApiUrl}</div>
    </div>
  );
}
function Content({ userSession }) {
  const authenticated = userSession && userSession.isUserSignedIn();
  const decentralizedID =
    userSession && userSession.isUserSignedIn() && userSession.loadUserData().decentralizedID;
  return (
    <>
      {!authenticated && <Landing />}
      {decentralizedID && (
        <>
          <Router>
            <AppBody path="/">
              <Overview path="/" decentralizedID={decentralizedID} />
              <OverviewTokens path="/tokens" />
              <OverviewContracts path="/contracts" />
              <OverviewNFTs path="/nfts" />
              <OverviewPox path="/pox" />
              <SpeedSpend
                path="/speed-spend"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <Hodl path="/hodl" decentralizedID={decentralizedID} userSession={userSession} />
              <HodlTokens
                path="/hodl-tokens"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <Jackpot
                path="/jackpot"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <AtTwo path="/at-two" decentralizedID={decentralizedID} userSession={userSession} />
              <SendMany
                path="/send-many"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <Monsters
                exact
                path="/monsters"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <StacksPops
                exact
                path="/stackspops"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <Marketplace
                exact
                path="/openriff"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <MonsterDetails
                path="/monsters/:monsterId"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <Rockets
                path="/rockets"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <RocketDetails
                path="/rockets/:rocketId"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <PoolRegistry
                path="/pools"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <PoolDetails
                path="/pools/join/:poolAddress"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <PoolDetails
                path="/pools/:poolId"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <PoolAudit
                path="/pool-audit"
                decentralizedID={decentralizedID}
                userSession={userSessionState}
              />
              <Swap path="/swap" decentralizedID={decentralizedID} userSession={userSessionState} />
              <PoxLite
                path="/poxlite"
                decentralizedID={decentralizedID}
                userSession={userSession}
              />
              <MyProfile path="/me" decentralizedID={decentralizedID} userSession={userSession} />
              <ClarityValues path="/cv" />
              <AddressConversion path="/addresses" />
              <Gaia path="/gaia" userSession={userSession} />
              <StackingActivies path="/stacking"></StackingActivies>
            </AppBody>
          </Router>
        </>
      )}
    </>
  );
}