import React, { useState, useEffect, useCallback } from 'react' import { useNavigate, useParams } from 'react-router-dom' import { FaSave, FaTimes, FaBuilding, FaUser, FaMapMarkerAlt, FaCreditCard, FaEnvelope, } from 'react-icons/fa' import LoadingSpinner from '../../../components/common/LoadingSpinner' import { BusinessParty } from '../../../types/common' import { mockBusinessPartyNew } from '../../../mocks/mockBusinessParties' import { Container } from '@/components/shared' interface ValidationErrors { [key: string]: string } const CustomerForm: React.FC = () => { const navigate = useNavigate() const { id } = useParams<{ id: string }>() const isEdit = Boolean(id) const [loading, setLoading] = useState(false) const [saving, setSaving] = useState(false) const [errors, setErrors] = useState({}) const [formData, setFormData] = useState(mockBusinessPartyNew) const loadFormData = useCallback(async () => { setLoading(true) try { if (isEdit && id) { // Simulate API call await new Promise((resolve) => setTimeout(resolve, 1000)) setFormData(mockBusinessPartyNew) } } catch (error) { console.error('Error loading form data:', error) } finally { setLoading(false) } }, [isEdit, id]) useEffect(() => { loadFormData() }, [loadFormData]) const validateForm = (): boolean => { const newErrors: ValidationErrors = {} if (!formData.code.trim()) { newErrors.code = 'Müşteri kodu zorunludur' } if (!formData.name.trim()) { newErrors.name = 'Şirket adı zorunludur' } if (formData.creditLimit < 0) { newErrors.creditLimit = "Kredi limiti 0'dan küçük olamaz" } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleInputChange = (field: keyof BusinessParty, value: string | number | boolean) => { setFormData((prev) => ({ ...prev, [field]: value, })) // Clear error when user starts typing if (errors[field]) { setErrors((prev) => ({ ...prev, [field]: '', })) } } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!validateForm()) { return } setSaving(true) try { // Simulate API call await new Promise((resolve) => setTimeout(resolve, 2000)) console.log('Customer data:', { ...formData, id: isEdit ? id : undefined, }) // Show success message alert(isEdit ? 'Müşteri başarıyla güncellendi!' : 'Müşteri başarıyla oluşturuldu!') // Navigate back to list navigate('/admin/crm') } catch (error) { console.error('Error saving customer:', error) alert('Bir hata oluştu. Lütfen tekrar deneyin.') } finally { setSaving(false) } } const handleCancel = () => { navigate('/admin/crm') } if (loading) { return } return (
{/* Header */}

{isEdit ? 'Müşteri Düzenle' : 'Yeni Müşteri'}

{isEdit ? 'Mevcut müşteri bilgilerini güncelleyin' : 'Yeni müşteri bilgilerini girin'}

{/* Form */}
{/* General Information */}

Genel Bilgiler

handleInputChange('code', e.target.value)} className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.code ? 'border-red-300 focus:border-red-500 focus:ring-red-500' : 'border-gray-300 focus:border-blue-500 focus:ring-blue-500' }`} placeholder="Örn: MST001" /> {errors.customerCode && (

{errors.customerCode}

)}
handleInputChange('name', e.target.value)} className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.name ? 'border-red-300 focus:border-red-500 focus:ring-red-500' : 'border-gray-300 focus:border-blue-500 focus:ring-blue-500' }`} placeholder="Şirket adını girin" /> {errors.companyName && (

{errors.companyName}

)}
handleInputChange('website', e.target.value)} className="block w-full px-3 py-1.5 text-sm border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-1 focus:border-blue-500 focus:ring-blue-500" placeholder="https://www.ornek.com" />
{/* Contact Information */}

İletişim Bilgileri

handleInputChange('email', e.target.value)} className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.email ? 'border-red-300 focus:border-red-500 focus:ring-red-500' : 'border-gray-300 focus:border-blue-500 focus:ring-blue-500' }`} placeholder="email@ornek.com" /> {errors.email &&

{errors.email}

}
handleInputChange('phone', e.target.value)} className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.phone ? 'border-red-300 focus:border-red-500 focus:ring-red-500' : 'border-gray-300 focus:border-blue-500 focus:ring-blue-500' }`} placeholder="+90 212 555 0123" /> {errors.phone &&

{errors.phone}

}
{/* Address Information */}

Adres Bilgileri

{/* Business Information */}

İş Bilgileri

handleInputChange('taxNumber', e.target.value)} className="block w-full px-3 py-1.5 text-sm border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-1 focus:border-blue-500 focus:ring-blue-500" placeholder="1234567890" />
handleInputChange('registrationNumber', e.target.value)} className="block w-full px-3 py-1.5 text-sm border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-1 focus:border-blue-500 focus:ring-blue-500" placeholder="98765" />
handleInputChange('creditLimit', parseFloat(e.target.value) || 0) } className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.creditLimit ? 'border-red-300 focus:border-red-500 focus:ring-red-500' : 'border-gray-300 focus:border-blue-500 focus:ring-blue-500' }`} placeholder="0.00" /> {errors.creditLimit && (

{errors.creditLimit}

)}
{/* Relationship Information */}

İlişki Yönetimi

handleInputChange('isActive', e.target.checked)} className="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" />
{/* Form Actions */}
) } export default CustomerForm