import { useContext } from 'react';
import { PremiumSettingsDispatchContext } from '../context/contexts';
import { PremiumSettings } from '../types/types';

export async function fetchPremiumSettings(): Promise<
  PremiumSettings | undefined
> {
  try {
    const response = await fetch(
      `${wpApiSettings.root}botfoundry/v1/get-premium-settings`,
      {
        method: 'POST',
        headers: {
          'X-WP-Nonce': wpApiSettings.nonce,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({ env: process.env.NODE_ENV }),
      }
    );
    if (!response.ok) {
      console.log('Error fetching premium settings');
      const data = await response.json();
      return data.premiumSettings;
    }
    const data = await response.json();

    if (!data.premiumSettings) {
      throw new Error('No premium settings found');
    }

    return data.premiumSettings;
  } catch (error) {
    console.error(error);
  }
}

export default function useGetPremiumSettings() {
  const premiumSettingsDispatch = useContext(PremiumSettingsDispatchContext);
  async function getPremiumSettings(
    onSuccess?: () => void,
    onError?: () => void
  ) {
    if (!wpApiSettings) {
      return Promise.reject(new Error('wpApiSettings is not available'));
    }

    const result = await fetchPremiumSettings();

    if (!result) {
      onError && onError();
      throw new Error('An error occurred while fetching settings.');
    }

    premiumSettingsDispatch({
      type: 'SET_PREMIUM_SETTINGS',
      payload: { ...result, loaded: true },
    });

    onSuccess && onSuccess();
    return result;
  }
  return getPremiumSettings;
}
