// static/admin/js/select-platform.js // Platform selection page for platform admins const platformLog = window.LogConfig ? window.LogConfig.createLogger('PLATFORM_SELECT') : console; function selectPlatform() { return { dark: false, loading: true, selecting: false, error: null, platforms: [], isSuperAdmin: false, async init() { platformLog.info('=== PLATFORM SELECTION PAGE INITIALIZING ==='); // Prevent multiple initializations if (window._platformSelectInitialized) { platformLog.warn('Platform selection page already initialized, skipping...'); return; } window._platformSelectInitialized = true; // Set theme this.dark = localStorage.getItem('theme') === 'dark'; // Check if user is logged in const token = localStorage.getItem('admin_token'); if (!token) { platformLog.warn('No token found, redirecting to login'); window.location.href = '/admin/login'; return; } // Load accessible platforms await this.loadPlatforms(); }, async loadPlatforms() { this.loading = true; this.error = null; try { platformLog.info('Fetching accessible platforms...'); const response = await apiClient.get('/admin/auth/accessible-platforms'); platformLog.debug('Platforms response:', response); this.isSuperAdmin = response.is_super_admin; this.platforms = response.platforms || []; if (this.isSuperAdmin) { platformLog.info('User is super admin, redirecting to dashboard...'); setTimeout(() => { window.location.href = '/admin/dashboard'; }, 1500); return; } if (!response.requires_platform_selection && this.platforms.length === 1) { // Only one platform assigned, auto-select it platformLog.info('Single platform assigned, auto-selecting...'); await this.selectPlatform(this.platforms[0]); return; } platformLog.info(`Loaded ${this.platforms.length} platforms`); } catch (error) { platformLog.error('Failed to load platforms:', error); if (error.message && error.message.includes('401')) { // Token expired or invalid window.location.href = '/admin/login'; return; } this.error = error.message || 'Failed to load platforms. Please try again.'; } finally { this.loading = false; } }, async selectPlatform(platform) { if (this.selecting) return; this.selecting = true; this.error = null; platformLog.info(`Selecting platform: ${platform.code}`); try { const response = await apiClient.post( `/admin/auth/select-platform?platform_id=${platform.id}` ); platformLog.debug('Platform selection response:', response); if (response.access_token) { // Store new token with platform context localStorage.setItem('admin_token', response.access_token); localStorage.setItem('token', response.access_token); // Store selected platform info localStorage.setItem('admin_platform', JSON.stringify({ id: platform.id, code: platform.code, name: platform.name })); // Update user data if provided if (response.user) { localStorage.setItem('admin_user', JSON.stringify(response.user)); } platformLog.info('Platform selected successfully, redirecting to dashboard...'); // Redirect to dashboard or last visited page const lastPage = localStorage.getItem('admin_last_visited_page'); const redirectTo = (lastPage && lastPage.startsWith('/admin/') && !lastPage.includes('/login') && !lastPage.includes('/select-platform')) ? lastPage : '/admin/dashboard'; window.location.href = redirectTo; } else { throw new Error('No token received from server'); } } catch (error) { platformLog.error('Platform selection failed:', error); this.error = error.message || 'Failed to select platform. Please try again.'; this.selecting = false; } }, async logout() { platformLog.info('Logging out...'); try { await apiClient.post('/admin/auth/logout'); } catch (error) { platformLog.error('Logout API error:', error); } finally { localStorage.removeItem('admin_token'); localStorage.removeItem('admin_user'); localStorage.removeItem('admin_platform'); localStorage.removeItem('token'); window.location.href = '/admin/login'; } }, toggleDarkMode() { this.dark = !this.dark; localStorage.setItem('theme', this.dark ? 'dark' : 'light'); } }; } platformLog.info('Platform selection module loaded');