import { useEffect, useState } from 'react';

export enum Theme {
  'dark' = 'dark',
  'light' = 'light',
}

export const useTheme = () => {
  const [theme, setTheme] = useState(Theme.light);

  const toggle = () => {
    const nextTheme = theme === 'dark' ? Theme.light : Theme.dark;
    setTheme(nextTheme);
  };

  useEffect(() => {
    const body = document.body;
    if (theme === 'dark') {
      body.setAttribute('theme-mode', 'dark');
      return;
    }

    if (theme === 'light') {
      body.setAttribute('theme-mode', 'light');
      return;
    }
  }, [theme]);

  useEffect(() => {
    const mql = window.matchMedia('(prefers-color-scheme: dark)');

    function matchMode(e) {
      if (e.matches) {
        setTheme(Theme.dark);
      } else {
        setTheme(Theme.light);
      }
    }

    matchMode(mql);
    mql.addEventListener('change', matchMode);
  }, []);

  return {
    theme,
    toggle,
  };
};
