import { PropsWithChildren, createContext, useContext, useMemo } from 'react';

import { LocaleIdentifier } from '../../../types';

export interface LocaleContextProviderProps {
  locale: LocaleIdentifier;
}

/** Value for {@link LocaleContext} */
export interface LocaleContextValue {
  /** Current locale */
  locale: LocaleIdentifier;
}

/** Context that returns current locale */
const LocaleContext = createContext<LocaleContextValue | undefined>(undefined);

/** Provider that used to pass current locale inside app */
export function LocaleContextProvider({ children, locale }: PropsWithChildren<LocaleContextProviderProps>) {
  const value = useMemo(() => ({ locale }), [locale]);
  return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;
}

/** Return current locale context data */
export function useLocaleContext(): LocaleContextValue {
  const value = useContext(LocaleContext);
  if (!value) {
    throw new Error('useLocaleContext should be used only inside LocaleContextProvider');
  }

  return value;
}
