// Providers Page Module class ProvidersPage { constructor() { this.providers = []; this.init(); } async init() { await this.loadProviders(); this.setupEventListeners(); } async loadProviders() { try { const data = await window.api.get('/providers'); this.providers = data; this.renderProviders(); this.renderStats(); } catch (error) { console.error('Error loading providers:', error); window.authManager.showToast('Failed to load providers', 'error'); } } renderProviders() { const container = document.getElementById('providers-list'); if (!container) return; if (this.providers.length === 0) { container.innerHTML = '
No providers configured
'; return; } container.innerHTML = `
${this.providers.map(provider => this.renderProviderCard(provider)).join('')}
`; } renderProviderCard(provider) { const statusClass = provider.status === 'online' ? 'success' : 'warning'; const modelCount = provider.models ? provider.models.length : 0; return `

${provider.name}

${provider.id}
${provider.status}
${modelCount} Models Available
Last used: ${provider.last_used ? window.api.formatTimeAgo(provider.last_used) : 'Never'}
${(provider.models || []).slice(0, 5).map(m => `${m}`).join('')} ${modelCount > 5 ? `+${modelCount - 5} more` : ''}
`; } renderStats() { const container = document.getElementById('provider-stats'); if (!container) return; const onlineCount = this.providers.filter(p => p.status === 'online').length; const totalModels = this.providers.reduce((sum, p) => sum + (p.models ? p.models.length : 0), 0); container.innerHTML = `
${this.providers.length}
Total Providers
${onlineCount}
Online Status
${totalModels}
Total Models
`; } async testProvider(id) { window.authManager.showToast(`Testing connection to ${id}...`, 'info'); try { await window.api.post(`/providers/${id}/test`, {}); window.authManager.showToast(`${id} connection successful!`, 'success'); this.loadProviders(); } catch (error) { window.authManager.showToast(`${id} test failed: ${error.message}`, 'error'); } } configureProvider(id) { window.authManager.showToast('Provider configuration via UI not yet implemented', 'info'); } setupEventListeners() { const testAllBtn = document.getElementById('test-all-providers'); if (testAllBtn) { testAllBtn.onclick = () => { this.providers.forEach(p => this.testProvider(p.id)); }; } } } window.initProviders = async () => { window.providersPage = new ProvidersPage(); };