export const fileToBase64 = (file: File): Promise => { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => { const result = reader.result as string; // remove "data:*/*;base64," prefix resolve(result.split(',')[1]); }; reader.onerror = (error) => reject(error); }); }; export const parseCsv = (csvText: string): Record[] => { const lines = csvText.trim().split('\n'); if (lines.length < 2) return []; const headers = lines[0].split(',').map(h => h.trim()); const data = []; const regex = /(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)/g; for (let i = 1; i < lines.length; i++) { const values = []; let match; while ((match = regex.exec(lines[i]))) { let value = match[1]; if (value.startsWith('"') && value.endsWith('"')) { value = value.substring(1, value.length - 1).replace(/""/g, '"'); } values.push(value.trim()); } if (values.length === headers.length) { const entry = headers.reduce((obj, header, index) => { obj[header] = values[index]; return obj; }, {} as Record); data.push(entry); } } return data; };