// Firebase configuration const firebaseConfig = { apiKey: "AIzaSyDqVv0wQ3X9X9X9X9X9X9X9X9X9X9X9X9X", authDomain: "edughost-12345.firebaseapp.com", projectId: "edughost-12345", storageBucket: "edughost-12345.appspot.com", messagingSenderId: "9876543210", appId: "1:9876543210:web:abcdef1234567890" }; // Check if Firebase app already exists let app; if (!firebase.apps.length) { app = firebase.initializeApp(firebaseConfig); } else { app = firebase.app(); } const auth = firebase.auth(); const db = firebase.firestore(); // Make auth and db available globally window.auth = auth; window.db = db; window.firebaseApp = app; // Authentication state listener auth.onAuthStateChanged((user) => { if (user) { console.log("User logged in:", user.email); document.querySelector('custom-email-list').setAttribute('user-id', user.uid); document.querySelector('custom-email-composer').setAttribute('user-id', user.uid); } else { console.log("User logged out"); } }); // Function to create user account async function createUserAccount(email, password) { try { const userCredential = await auth.createUserWithEmailAndPassword(email, password); await db.collection('users').doc(userCredential.user.uid).set({ email: email, createdAt: firebase.firestore.FieldValue.serverTimestamp() }); return userCredential.user; } catch (error) { throw error; } } // Global email sending function window.sendEmail = async function(userId, emailData) { try { const emailRef = await db.collection('emails').add({ ...emailData, userId: userId, read: false, createdAt: firebase.firestore.FieldValue.serverTimestamp() }); // Return the email ID for reference return emailRef.id; } catch (error) { console.error("Error sending email:", error); throw error; } } // Function to fetch emails async function fetchEmails(userId) { try { const snapshot = await db.collection('emails') .where('userId', '==', userId) .orderBy('createdAt', 'desc') .get(); return snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); } catch (error) { console.error("Error fetching emails:", error); return demoEmails; // Fallback to demo emails } } const demoEmails = [ { id: '1', from: 'registrar@harvard.edu', subject: 'Fall Semester Registration', preview: 'Registration for Fall 2023 is now open. Click here to register...', date: '10 min ago', read: false, body: `Dear Student, Registration for Fall 2023 courses is now open. Please log in to the student portal to select your courses. Important dates: - Add/Drop Period: August 28 - September 8 - Midterm Exams: October 16-20 - Final Exams: December 11-15 Regards, Harvard Registrar's Office` }, { id: '2', from: 'financialaid@yale.edu', subject: 'Financial Aid Package Update', preview: 'Your financial aid package for 2023-2024 has been updated...', date: '1 hour ago', read: true, body: `Dear Student, We're writing to inform you that your financial aid package for the 2023-2024 academic year has been updated. Please log in to your Student Aid Portal to review the changes. If you have any questions, please contact our office at (203) 432-0441. Sincerely, Yale Financial Aid Office` }, { id: '3', from: 'housing@mit.edu', subject: 'Dormitory Assignment', preview: 'Your dormitory assignment for Fall 2023 is now available...', date: '3 hours ago', read: true, body: `Hello, Your dormitory assignment for Fall 2023 is now available. You've been assigned to Baker House, Room 412. Move-in dates: - Freshmen: August 28 - Returning Students: August 30 Please complete the housing questionnaire by August 15. MIT Housing Office` }, { id: '4', from: 'library@stanford.edu', subject: 'Book Due Reminder', preview: 'The book "Computer Science Principles" is due in 3 days...', date: '1 day ago', read: false, body: `Library Notice: The following book checked out to your account is due soon: - "Computer Science Principles" by John Smith Due Date: July 15, 2023 You may renew this item online if no one has placed a hold on it. Stanford University Libraries` }, { id: '5', from: 'careercenter@princeton.edu', subject: 'Career Fair Invitation', preview: 'Princeton Fall Career Fair - Register Now...', date: '2 days ago', read: true, body: `Princeton Students, You're invited to attend our Fall Career Fair on September 12, 2023 from 10am-3pm in Dillon Gym. Over 150 employers will be recruiting for full-time positions and internships. Register now through Handshake. Princeton Career Services` } ]; // In a real app, this would be replaced with actual API calls function fetchEmails() { return new Promise(resolve => { setTimeout(() => resolve(demoEmails), 500); }); } // Enhanced email generation with realistic patterns function generateRandomEmail(domain) { const patterns = [ () => `s${Math.floor(Math.random() * 1000000)}@${domain}`, () => `student${Math.floor(Math.random() * 1000)}@${domain}`, () => { const first = ['j', 'm', 'a', 's', 'k', 'd'][Math.floor(Math.random() * 6)]; const last = ['smith', 'johnson', 'williams', 'brown', 'jones', 'miller'][Math.floor(Math.random() * 6)]; return `${first}.${last}${Math.floor(Math.random() * 10)}@${domain}`; }, () => { const year = new Date().getFullYear(); return `classof${year - Math.floor(Math.random() * 4)}@${domain}`; } ]; return patterns[Math.floor(Math.random() * patterns.length)](); } // Function to validate email format function isValidEmail(email) { const re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; return re.test(email); } // Function to check if domain exists (simulated) function checkDomainAvailability(domain) { const availableDomains = [ 'ccsf.edu', 'mcc.edu', 'bmcc.cuny.edu', 'aacc.edu', 'ucla.edu', 'umich.edu', 'utexas.edu', 'fsu.edu', 'harvard.edu', 'yale.edu', 'princeton.edu', 'columbia.edu', 'mit.edu', 'caltech.edu', 'stanford.edu', 'gatech.edu', 'lsu.edu' ]; return availableDomains.includes(domain); }