import { Dispatch, SetStateAction, useEffect, useMemo } from 'react';
import { useLocalStorage } from 'usehooks-ts';

import { useStores } from '@/app/(root)/AppProviders';
import { getDefaultModel } from '@/utils/utils';

import { CreateFormState } from './types';
import useModelTypeOptions from './useModelTypeOptions';

export default function useModelSwitchOnUpgrade(
  state: CreateFormState,
  validateAndSetState: Dispatch<SetStateAction<CreateFormState>>
) {
  const { session } = useStores();
  const modelTypeOptions = useModelTypeOptions();

  const defaultModelName = useMemo(() => {
    return getDefaultModel(modelTypeOptions);
  }, [modelTypeOptions]);

  const [hasSeenDefaultModel, setHasSeenDefaultModel] = useLocalStorage(
    `has-seen-${defaultModelName}-${session.userId}`,
    false
  );

  useEffect(() => {
    if (defaultModelName && !hasSeenDefaultModel) {
      if (state.global.model !== defaultModelName) {
        // currently selected model is not the default - switch to it
        validateAndSetState((prev: CreateFormState) => ({
          ...prev,
          global: { ...prev.global, model: defaultModelName },
        }));
      }
      // set has seen default model to true
      setHasSeenDefaultModel(true);
    }
  }, [
    defaultModelName,
    hasSeenDefaultModel,
    validateAndSetState,
    state.global.model,
  ]);
}
