import initializeApollo from '@/apollo/client';
import { Content } from '@/Components/Calculation';
import { Error } from '@/Components/Common/Error';
import * as hooks from '@/process/hooks';
import { makeGetUserType } from '@/utils/user';
import { dehydrate, QueryClient } from '@tanstack/react-query';

export default function Page(props) {
  if (props.statusCode !== 200) return <Error {...props} />;

  return (
    <Content
      initHooks={() => {
        hooks.useSentryScope();
        hooks.useMainData();
        hooks.useInsuranceData();
        hooks.useReactions();
      }}
    />
  );
}

/** @type {import('next').GetServerSideProps} */
export async function getServerSideProps({ req }) {
  const { cookie = '' } = req.headers;

  const queryClient = new QueryClient();
  const apolloClient = initializeApollo(null, req.headers);
  const getUserType = makeGetUserType({ apolloClient, queryClient });

  try {
    const user = await getUserType({ cookie });

    if (!user.default) {
      return {
        props: {
          initialQueryState: dehydrate(queryClient),
          statusCode: 403,
        },
      };
    }

    return {
      props: {
        calculation: {},
        initialApolloState: apolloClient.cache.extract(),
        initialQueryState: dehydrate(queryClient),
        statusCode: 200,
        user,
      },
    };
  } catch (error) {
    return {
      props: {
        error: JSON.stringify(error),
        initialQueryState: dehydrate(queryClient),
        statusCode: 500,
      },
    };
  }
}
