import React, { useState, useEffect } from 'react'; import { motion } from 'motion/react'; import { Terminal, ShieldAlert, Key, Database, RefreshCw, CheckCircle2, XCircle } from 'lucide-react'; interface LogEntry { id: string; timestamp: string; type: 'info' | 'error' | 'success' | 'warning'; message: string; data?: any; } export const DiagnosticsDebugView: React.FC<{ lang: 'en' | 'ar' }> = ({ lang }) => { const [logs, setLogs] = useState([]); const [isRunning, setIsRunning] = useState(false); const addLog = (type: LogEntry['type'], message: string, data?: any) => { setLogs(prev => [ { id: Math.random().toString(36).substring(7), timestamp: new Date().toISOString(), type, message, data }, ...prev ]); }; const runDiagnostics = async () => { setIsRunning(true); setLogs([]); addLog('info', lang === 'ar' ? 'بدء التشخيص التحليلي...' : 'Starting diagnostics...'); // 1. Check API Keys in LocalStorage try { addLog('info', lang === 'ar' ? 'جاري فحص المفاتيح المخزنة...' : 'Checking locally stored API keys...'); const hfToken = localStorage.getItem('hf_projects_token'); const ghToken = localStorage.getItem('github_projects_token'); const keys = { HUGGING_FACE_TOKEN: hfToken ? `${hfToken}` : 'NOT_FOUND', GITHUB_TOKEN: ghToken ? `${ghToken}` : 'NOT_FOUND', }; addLog( hfToken || ghToken ? 'success' : 'warning', lang === 'ar' ? 'نتائج فحص المفاتيح المحلية' : 'Local Keys Scan Results', keys ); const getEnvVar = (name: string) => { const altName = name.replace('VITE_', ''); return (window as any).__ENV?.[name] || (window as any).__ENV?.[altName] || (window as any).env?.[name] || (window as any).env?.[altName] || (import.meta as any).env?.[name] || (import.meta as any).env?.[altName]; }; // Check environment variables if possible const envKeys = { VITE_SUPABASE_URL: getEnvVar('VITE_SUPABASE_URL') ? getEnvVar('VITE_SUPABASE_URL') : 'NOT_FOUND', VITE_SUPABASE_ANON_KEY: getEnvVar('VITE_SUPABASE_ANON_KEY') ? 'PRESENT (HIDDEN FOR SECURITY)' : 'NOT_FOUND', }; addLog('info', lang === 'ar' ? 'بيانات بيئة التشغيل' : 'Environment Variables Config', envKeys); } catch (e: any) { addLog('error', 'Error reading keys', e.message); } // 2. Mock Supabase Handshake Test try { addLog('info', lang === 'ar' ? 'بدء فحص اتصال قاعدة بيانات Supabase...' : 'Initiating Supabase connection handshake...'); const getEnvVar = (name: string) => { const altName = name.replace('VITE_', ''); return (window as any).__ENV?.[name] || (window as any).__ENV?.[altName] || (window as any).env?.[name] || (window as any).env?.[altName] || (import.meta as any).env?.[name] || (import.meta as any).env?.[altName]; }; const supabaseUrl = getEnvVar('VITE_SUPABASE_URL'); const supabaseKey = getEnvVar('VITE_SUPABASE_ANON_KEY'); if (!supabaseUrl || !supabaseKey) { addLog('error', lang === 'ar' ? 'متغيرات بيئة Supabase مفقودة' : 'Supabase environment variables missing. Handshake aborted.'); } else { addLog('info', `Pinging Supabase URL: ${supabaseUrl}/rest/v1/`); // We will just do a fetch to the REST endpoint root or a public table if necessary, but a mock delay provides the visual of handshake. await new Promise(resolve => setTimeout(resolve, 1500)); try { const res = await fetch(`${supabaseUrl}/rest/v1/`, { headers: { 'apikey': supabaseKey, 'Authorization': `Bearer ${supabaseKey}` } }); if (res.ok || res.status === 404) { // 404 on root is fine, means server is reachable addLog('success', lang === 'ar' ? 'تم الاتصال بـ Supabase بنجاح' : 'Supabase handshake successful. Server is reachable and key is valid.'); } else { addLog('error', lang === 'ar' ? `فشل الاتصال: ${res.statusText}` : `Handshake failed: ${res.status} ${res.statusText}`); } } catch (netErr: any) { addLog('error', lang === 'ar' ? 'تعطل الاتصال بالشبكة (CORS/DNS)' : 'Network handshake failed (CORS/DNS Error)', netErr.message); } } } catch (e: any) { addLog('error', 'Supabase diagnostic error', e.message); } addLog('info', lang === 'ar' ? 'اكتمل التشخيص.' : 'Diagnostics completed.'); setIsRunning(false); }; return (

{lang === 'ar' ? 'شاشة التشخيص وإصلاح الأخطاء' : 'Diagnostics & Debugging Console'}

{lang === 'ar' ? 'عرض فوري للمفاتيح الخام وحالة الاتصال بقواعد البيانات' : 'Raw API keys inspector and database handshake status for troubleshooting.'}

{/* Console Header */}
sys_debug_output.log
{/* Console Output */}
{logs.length === 0 ? (

{lang === 'ar' ? 'انقر على "بدء الفحص" لتوليد السجلات.' : 'Click "Run Diagnostics" to generate logs.'}

) : ( logs.map(log => (
[{new Date(log.timestamp).toLocaleTimeString()}] {log.type === 'error' && } {log.type === 'success' && } {log.type === 'info' && } {log.type === 'warning' && }
{log.message} {log.data && (
                        {JSON.stringify(log.data, null, 2)}
                      
)}
)) )}
); }