import React, { useState, useEffect, useCallback } from 'react' import { useNavigate, useParams } from 'react-router-dom' import { FaSave, FaTimes, FaCog, FaCalendar, FaExclamationTriangle, FaMapMarkerAlt, FaWrench, } from 'react-icons/fa' import LoadingSpinner from '../../../components/common/LoadingSpinner' import { CriticalityLevelEnum, PmWorkCenter, PmWorkCenterSpecification, WorkCenterStatusEnum, } from '../../../types/pm' import { mockWorkCenters } from '../../../mocks/mockWorkCenters' import { mockDepartments } from '../../../mocks/mockDepartments' import { HrDepartment } from '../../../types/hr' import { Container } from '@/components/shared' import { ROUTES_ENUM } from '@/routes/route.constant' interface ValidationErrors { [key: string]: string } const WorkCenterForm: 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 [departments, setDepartments] = useState([]) const [formData, setFormData] = useState({ id: '', code: '', name: '', description: '', workCenterId: '', workCenterType: { id: '', code: '', name: '', category: '', isActive: true, }, manufacturer: '', model: '', serialNumber: '', installationDate: new Date('2022-03-15'), warrantyExpiry: new Date('2022-03-15'), location: '', departmentId: '', status: WorkCenterStatusEnum.Operational, criticality: CriticalityLevelEnum.Medium, specifications: [], maintenancePlans: [], workOrders: [], downTimeHistory: [], capacity: 0, costPerHour: 0, setupTime: 0, machineType: '', isActive: true, creationTime: new Date('2022-03-15'), lastModificationTime: new Date('2024-01-15'), }) const loadDepartments = useCallback(async () => { try { setDepartments(mockDepartments) } catch (error) { console.error('Error loading departments:', error) } }, []) const loadFormData = useCallback(async () => { setLoading(true) try { if (isEdit && id) { // Simulate API call await new Promise((resolve) => setTimeout(resolve, 1000)) const mockWorkCenter: PmWorkCenter = mockWorkCenters.find((eq) => eq.id === id)! setFormData(mockWorkCenter) } } catch (error) { console.error('Error loading form data:', error) } finally { setLoading(false) } }, [isEdit, id]) useEffect(() => { loadDepartments() loadFormData() }, [loadDepartments, loadFormData]) const validateForm = (): boolean => { const newErrors: ValidationErrors = {} if (!formData.code.trim()) { newErrors.workCenterCode = 'İş Merkezi kodu zorunludur' } if (!formData.name.trim()) { newErrors.name = 'İş Merkezi adı zorunludur' } if (!formData.workCenterType) { newErrors.workCenterType = 'İş Merkezi tipi seçilmelidir' } if (!formData.location.trim()) { newErrors.location = 'Lokasyon zorunludur' } if (!formData.departmentId) { newErrors.departmentId = 'Departman seçilmelidir' } if (!formData.installationDate) { newErrors.installationDate = 'Kurulum tarihi zorunludur' } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleInputChange = ( field: keyof PmWorkCenter, value: string | boolean | PmWorkCenterSpecification[], ) => { setFormData((prev) => ({ ...prev, [field]: value, })) // Clear error when user starts typing if (errors[field]) { setErrors((prev) => ({ ...prev, [field]: '', })) } } const addSpecification = () => { const newSpec: PmWorkCenterSpecification = { id: '', workCenterId: '', specificationName: '', specificationValue: '', unit: '', isRequired: false, } setFormData((prev) => ({ ...prev, specifications: [...prev.specifications, newSpec], })) } const updateSpecification = ( index: number, field: keyof PmWorkCenterSpecification, value: string | boolean, ) => { const updatedSpecs = [...formData.specifications] updatedSpecs[index] = { ...updatedSpecs[index], [field]: value } setFormData((prev) => ({ ...prev, specifications: updatedSpecs, })) } const removeSpecification = (index: number) => { setFormData((prev) => ({ ...prev, specifications: prev.specifications.filter((_, i) => i !== index), })) } 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('WorkCenter data:', { ...formData, id: isEdit ? id : undefined, }) // Show success message alert(isEdit ? 'İş Merkezi başarıyla güncellendi!' : 'İş Merkezi başarıyla oluşturuldu!') // Navigate back to list navigate(ROUTES_ENUM.protected.maintenance.workcenters) } catch (error) { console.error('Error saving Workcenter:', error) alert('Bir hata oluştu. Lütfen tekrar deneyin.') } finally { setSaving(false) } } const handleCancel = () => { navigate(ROUTES_ENUM.protected.maintenance.workcenters) } if (loading) { return } return (
{/* Header */}

{isEdit ? 'İş Merkezi Düzenle' : 'Yeni İş Merkezi'}

{isEdit ? 'Mevcut iş merkezi bilgilerini güncelleyin' : 'Yeni iş merkezi bilgilerini girin'}

{/* Form */}
{/* Basic Information */}

Genel Bilgiler

{errors.workCenterId && (

{errors.workCenterId}

)}
{errors.workCenterType && (

{errors.workCenterType}

)}
handleInputChange('name', e.target.value)} className={`block w-full px-2.5 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="İş Merkezi adı" /> {errors.name &&

{errors.name}

}