import React, { useState } from 'react'; import { Brain, Settings, Circle, Sparkles, Zap, FileText, ChevronDown, ChevronRight, Upload, AlertCircle } from 'lucide-react'; import FileList from './FileList'; import AdminLogin from './AdminLogin'; interface SidebarProps { isOpen: boolean; cocoons: Array<{ id: string; type: string; wrapped: any; }>; aiState: { quantumState: number[]; chaosState: number[]; activePerspectives: string[]; ethicalScore: number; processingPower: number; }; darkMode: boolean; supabase: any; isAdmin: boolean; setIsAdmin: (isAdmin: boolean) => void; } const Sidebar: React.FC = ({ isOpen, cocoons, aiState, darkMode, supabase, isAdmin, setIsAdmin }) => { const [activeSection, setActiveSection] = useState('cocoons'); const [selectedFile, setSelectedFile] = useState(null); const [uploadError, setUploadError] = useState(null); const [isUploading, setIsUploading] = useState(false); const [showAdminPrompt, setShowAdminPrompt] = useState(false); const [authError, setAuthError] = useState(null); if (!isOpen) return null; const handleAdminLogin = async (password: string) => { try { setAuthError(null); const { data: { user, session }, error } = await supabase.auth.signInWithPassword({ email: 'admin@codette.ai', password: password }); if (error) { setAuthError(error.message); throw error; } if (!session) { throw new Error('No session after login'); } // Verify admin role const { data: { role }, error: roleError } = await supabase.rpc('get_user_role'); if (roleError) { throw roleError; } if (role === 'admin') { setIsAdmin(true); setShowAdminPrompt(false); setAuthError(null); } else { throw new Error('Insufficient permissions'); } } catch (error: any) { console.error('Login error:', error); setAuthError(error.message || 'Invalid login credentials'); throw error; } }; const handleFileUpload = async () => { if (!selectedFile) return; if (!isAdmin) { setUploadError('Only administrators can upload files.'); return; } try { setIsUploading(true); setUploadError(null); // Get user role from session const { data: { user }, error: userError } = await supabase.auth.getUser(); if (userError) throw userError; if (!user || user.role !== 'admin') { throw new Error('Only administrators can upload files.'); } // Upload file to Supabase storage const { data, error } = await supabase.storage .from('codette-files') .upload(`${Date.now()}-${selectedFile.name}`, selectedFile, { upsert: false }); if (error) throw error; // Add file reference to database const { error: dbError } = await supabase .from('codette_files') .insert([ { filename: selectedFile.name, storage_path: data.path, file_type: selectedFile.type, uploaded_at: new Date().toISOString() } ]); if (dbError) throw dbError; setSelectedFile(null); setUploadError(null); } catch (error: any) { console.error('Error uploading file:', error); setUploadError(error.message || 'Failed to upload file. Please try again.'); } finally { setIsUploading(false); } }; const handleSettingsClick = () => { if (!isAdmin) { setShowAdminPrompt(true); } setActiveSection('settings'); }; return ( ); }; export default Sidebar;