'use client'; import { useState, useEffect, useCallback } from 'react'; import { ImageStudio, VideoStudio, LipSyncStudio, CinemaStudio, getUserBalance } from 'studio'; import ApiKeyModal from './ApiKeyModal'; const TABS = [ { id: 'image', label: 'Image Studio' }, { id: 'video', label: 'Video Studio' }, { id: 'lipsync', label: 'Lip Sync' }, { id: 'cinema', label: 'Cinema Studio' }, ]; const STORAGE_KEY = 'muapi_key'; export default function StandaloneShell() { const [apiKey, setApiKey] = useState(null); const [activeTab, setActiveTab] = useState('image'); const [balance, setBalance] = useState(null); const [showSettings, setShowSettings] = useState(false); const [hasMounted, setHasMounted] = useState(false); const fetchBalance = useCallback(async (key) => { try { const data = await getUserBalance(key); setBalance(data.balance); } catch (err) { console.error('Balance fetch failed:', err); } }, []); useEffect(() => { setHasMounted(true); const stored = localStorage.getItem(STORAGE_KEY); if (stored) { setApiKey(stored); fetchBalance(stored); } }, [fetchBalance]); const handleKeySave = useCallback((key) => { localStorage.setItem(STORAGE_KEY, key); setApiKey(key); fetchBalance(key); }, [fetchBalance]); const handleKeyChange = useCallback(() => { localStorage.removeItem(STORAGE_KEY); setApiKey(null); setBalance(null); }, []); // Poll for balance every 30 seconds if key is present useEffect(() => { if (!apiKey) return; const interval = setInterval(() => fetchBalance(apiKey), 30000); return () => clearInterval(interval); }, [apiKey, fetchBalance]); if (!hasMounted) return (
); if (!apiKey) { return ; } return (
{/* Header */}
{/* Left: Logo */}
OpenGenerativeAI
{/* Center: Navigation */} {/* Right: Actions */}
${balance !== null ? `${balance}` : '---'}
setShowSettings(true)} className="w-8 h-8 rounded-full bg-gradient-to-tr from-[#d9ff00] to-yellow-200 border border-white/20 cursor-pointer hover:scale-105 transition-transform" />
{/* Studio Content */}
{activeTab === 'image' && } {activeTab === 'video' && } {activeTab === 'lipsync' && } {activeTab === 'cinema' && }
{/* Settings Modal */} {showSettings && (

Settings

Manage your AI studio preferences and authentication.

{apiKey.slice(0, 8)}••••••••••••••••
)}
); }