import React, { useState, useEffect } from 'react'; import Toast from '../Components/Toast'; import { ChevronLeft, Upload, X, Check } from 'lucide-react'; export default function InvestorAdd() { const isReceptionist = window.__APP_DATA__?.role === 'receptionist'; const basePath = isReceptionist ? '/receptionist/investors' : '/owner/investors'; const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [branches, setBranches] = useState([]); const [toast, setToast] = useState(null); const [formData, setFormData] = useState({ name: '', investment_date: new Date().toISOString().split('T')[0], investment_amount: '', applicable_to_all_branches: false, branch_ids: isReceptionist ? [window.__APP_DATA__?.user?.branch_id] : [], roi_type: 'Percentage', roi_value: '', roi_period: 'Monthly', security_proof_document: null }); const [branchDropdownOpen, setBranchDropdownOpen] = useState(false); useEffect(() => { const fetchBranches = async () => { try { const response = await fetch('/api/branches'); const data = await response.json(); setBranches(data); } catch (error) { console.error('Error fetching branches:', error); } finally { setLoading(false); } }; fetchBranches(); }, []); const handleChange = (e) => { const { name, value, type, checked } = e.target; setFormData({ ...formData, [name]: type === 'checkbox' ? checked : value }); }; const handleFileChange = (e) => { setFormData({ ...formData, security_proof_document: e.target.files[0] }); }; const toggleBranch = (id) => { const newBranchIds = formData.branch_ids.includes(id) ? formData.branch_ids.filter(bid => bid !== id) : [...formData.branch_ids, id]; setFormData({ ...formData, branch_ids: newBranchIds }); }; const handleSave = async (e) => { e.preventDefault(); setSaving(true); const data = new FormData(); Object.keys(formData).forEach(key => { if (key === 'branch_ids') { formData.branch_ids.forEach(id => data.append('branch_ids[]', id)); } else if (key === 'security_proof_document' && formData[key]) { data.append('security_proof_document', formData[key]); } else if (key === 'applicable_to_all_branches') { data.append(key, formData[key] ? '1' : '0'); } else { data.append(key, formData[key]); } }); const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); try { const response = await fetch('/api/investors', { method: 'POST', headers: { 'Accept': 'application/json', 'X-CSRF-TOKEN': csrfToken }, body: data }); if (response.ok) { setToast({ message: 'Investor added successfully!', type: 'success' }); setTimeout(() => window.location.href = basePath, 1500); } else { const errorData = await response.json().catch(() => ({})); if (errorData.errors) { const message = Object.entries(errorData.errors) .map(([field, msgs]) => `${field.replace('_', ' ')}: ${msgs.join(', ')}`) .join('\n'); setToast({ message: 'Validation Error:\n' + message, type: 'error' }); } else { setToast({ message: 'Error saving investor: ' + (errorData.message || response.statusText), type: 'error' }); } } } catch (error) { console.error('API Error:', error); setToast({ message: 'Failed to save investor.', type: 'error' }); } finally { setSaving(false); } }; if (loading) return