import React, { createContext, useState, useContext, useEffect } from "react";
import { useDarkMode } from "storybook-dark-mode";

const ThemeContext = createContext();

export const ThemeProvider = ({ children }) => {
  const isDarkMode = useDarkMode();
  const [theme, setTheme] = useState("light");

  const toggleTheme = () => {
    setTheme((prevTheme) => (prevTheme === "light" ? "dark" : "light"));
  };

  useEffect(() => {
    // You can use localStorage to persist the theme preference
    const savedTheme = localStorage.getItem("theme");
    setTheme((isDarkMode ? "dark" : "light") || savedTheme);
  }, [isDarkMode]);

  useEffect(() => {
    document.documentElement.setAttribute("data-theme", theme);
    localStorage.setItem("theme", theme);
  }, [theme]);

  return (
    <ThemeContext.Provider value={{ theme, toggleTheme }}>
      {children}
    </ThemeContext.Provider>
  );
};

export const useTheme = () => {
  const context = useContext(ThemeContext);
  if (!context) {
    throw new Error("useTheme must be used within a ThemeProvider");
  }
  return context;
};

export const decorators = [
  (renderStory) => <ThemeProvider>{renderStory()}</ThemeProvider>,
];