File size: 4,495 Bytes
c024705
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
818ef98
c024705
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/**
 * Frontend Configuration for AIMHSA
 * Handles API endpoints and environment-specific settings
 */

class AppConfig {
    constructor() {
        // Detect environment
        this.environment = this.detectEnvironment();
        
        // Set API base URL based on environment
        this.apiBaseUrl = this.getApiBaseUrl();
        
        // API endpoints
        this.endpoints = {
            // Chat endpoints
            ask: '/ask',
            session: '/session',
            history: '/history',
            conversations: '/conversations',
            
            // User endpoints
            register: '/register',
            login: '/login',
            logout: '/logout',
            forgotPassword: '/forgot_password',
            resetPassword: '/reset_password',
            
            // Professional endpoints
            professionalLogin: '/professional/login',
            professionalProfile: '/professional/profile',
            professionalSessions: '/professional/sessions',
            professionalUsers: '/professional/users',
            professionalNotifications: '/professional/notifications',
            professionalDashboard: '/professional/dashboard-stats',
            
            // Admin endpoints
            adminLogin: '/admin/login',
            adminProfessionals: '/admin/professionals',
            adminBookings: '/admin/bookings',
            adminUsers: '/admin/users',
            
            // Utility endpoints
            uploadPdf: '/upload_pdf',
            clearChat: '/clear_chat',
            reset: '/reset',
            healthz: '/healthz'
        };
        
        // App settings
        this.settings = {
            defaultTimeout: 30000,
            maxRetries: 3,
            debounceDelay: 300,
            autoSaveDelay: 1000
        };
    }
    
    detectEnvironment() {
        const hostname = window.location.hostname;
        const protocol = window.location.protocol;
        const port = window.location.port;
        
        if (hostname === 'localhost' || hostname === '127.0.0.1') {
            return 'development';
        } else if (hostname.includes('test') || hostname.includes('staging')) {
            return 'testing';
        } else {
            return 'production';
        }
    }
    
    getApiBaseUrl() {
        const hostname = window.location.hostname;
        const protocol = window.location.protocol;
        const port = window.location.port;
        
        // Check if API_BASE_URL is set in environment
        if (window.API_BASE_URL) {
            return window.API_BASE_URL;
        }
        
        // Environment-specific API URLs
        switch (this.environment) {
            case 'development':
                // In development, API might be on different port
                if (port === '8000' || port === '3000') {
                    return `${protocol}//${hostname}:7860`;
                }
                return ''; // Same origin
                
            case 'testing':
                return ''; // Same origin for testing
                
            case 'production':
                // In production, use same origin (standard hosting setup)
                return '';
                
            default:
                return '';
        }
    }
    
    getFullUrl(endpoint) {
        const baseUrl = this.apiBaseUrl;
        const path = this.endpoints[endpoint] || endpoint;
        
        if (baseUrl) {
            return `${baseUrl}${path}`;
        } else {
            return path; // Relative URL
        }
    }
    
    // Convenience methods for common endpoints
    getChatUrl() { return this.getFullUrl('ask'); }
    getLoginUrl() { return this.getFullUrl('login'); }
    getRegisterUrl() { return this.getFullUrl('register'); }
    getProfessionalLoginUrl() { return this.getFullUrl('professionalLogin'); }
    getAdminLoginUrl() { return this.getFullUrl('adminLogin'); }
    
    // Environment checks
    isDevelopment() { return this.environment === 'development'; }
    isProduction() { return this.environment === 'production'; }
    isTesting() { return this.environment === 'testing'; }
}

// Global configuration instance
window.AppConfig = new AppConfig();

// Debug information in development
if (window.AppConfig.isDevelopment()) {
    console.log('🔧 AIMHSA Development Mode');
    console.log('API Base URL:', window.AppConfig.apiBaseUrl);
    console.log('Environment:', window.AppConfig.environment);
}