'use client' import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'; import { AppSettings } from '../types'; const defaultSettings: AppSettings = { opencodeApiKey: '', opencodeModel: 'minimax-m2.5-free', api34aiKey: '', api34aiBaseUrl: 'https://api.34ai.net/api/v1', imageModel: 'banana_pro_2', videoModel: 'veo3.1', defaultDuration: 4, defaultAspectRatio: '16:9', tiktokCookies: '', }; interface SettingsContextType { settings: AppSettings; updateSettings: (newSettings: Partial) => void; isLoaded: boolean; isMounted: boolean; } const SettingsContext = createContext({ settings: defaultSettings, updateSettings: () => {}, isLoaded: false, isMounted: false, }); export function SettingsProvider({ children }: { children: ReactNode }) { const [settings, setSettings] = useState(defaultSettings); const [isLoaded, setIsLoaded] = useState(false); const [isMounted, setIsMounted] = useState(false); useEffect(() => { setIsMounted(true); const saved = localStorage.getItem('ai-video-flow-settings'); if (saved && saved !== 'undefined' && saved !== 'null') { try { const parsed = JSON.parse(saved); setSettings({ ...defaultSettings, ...parsed }); } catch (e) { console.error('Failed to parse settings:', e); } } setIsLoaded(true); }, []); const updateSettings = (newSettings: Partial) => { const sanitized: Partial = {} for (const [key, value] of Object.entries(newSettings)) { if (value !== undefined && value !== 'undefined') { (sanitized as any)[key] = value } } const updated = { ...settings, ...sanitized } setSettings(updated) localStorage.setItem('ai-video-flow-settings', JSON.stringify(updated)) }; return ( {children} ); } export function useSettings() { return useContext(SettingsContext); }