import  { createContext, useContext, useState,ReactNode } from 'react';

type ThemeContextType ={
  theme : 'light' | 'dark';
  toggleTheme: () => void;
}

// 1. ThemeContext 생성 (기본값으로 'light' 사용)
const ThemeContext = createContext<ThemeContextType | undefined>(undefined);

type ThemeProviderProps = {
  children : ReactNode;
};

function ThemeProvider({ children } : ThemeProviderProps) {
  // 2. useState를 사용하여 테마를 관리하고, 현재 테마와 테마를 변경하는 함수를 제공하세요.
  const [theme, setTheme] = useState<'light' | 'dark'>('light');
  
  // 테마를 변경하는 함수 구현(작성1)
  const toggleTheme = () => {
    setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light'));
  };

  return (
    // ThemeContext.Provider를 사용하여 현재 테마와 테마 변경 함수를 제공
    //작성2--> Provider를 이용해서 구현
    <ThemeContext.Provider value={{theme, toggleTheme}}>
      {children}
    </ThemeContext.Provider>
  );
}

function ThemeButton() {
  // 3. useContext를 사용하여 현재 테마와 테마 변경 함수를 가져오세요.
  const context = useContext(ThemeContext);

  if(!context){
    throw new Error('error');
  }
  const { theme, toggleTheme } = context; // useContext를 사용하여 테마와 toggleTheme 함수 가져오기

  return (
    <button
      onClick={toggleTheme}
      style={{
        backgroundColor: theme === 'light' ? '#fff' : '#333',
        color: theme === 'light' ? '#000' : '#fff',
        padding: '10px 20px',
        marginTop: '20px',
      }}
    >
      Toggle Theme
    </button>
  );
}

function App() {
  return (
    <ThemeProvider>
      <h1>Theme Switcher</h1>
      <ThemeButton />
    </ThemeProvider>
  );
}

export default App;