import { useState, useEffect } from 'react' import { X } from 'lucide-react' import axios from 'axios' function DogForm({ dog, onClose, onSave }) { const [formData, setFormData] = useState({ name: '', registration_number: '', breed: '', sex: 'male', birth_date: '', color: '', microchip: '', notes: '', sire_id: null, // Changed from '' to null dam_id: null, // Changed from '' to null litter_id: null // Changed from '' to null }) const [dogs, setDogs] = useState([]) const [litters, setLitters] = useState([]) const [loading, setLoading] = useState(false) const [error, setError] = useState('') const [useManualParents, setUseManualParents] = useState(true) const [littersAvailable, setLittersAvailable] = useState(false) useEffect(() => { fetchDogs() fetchLitters() if (dog) { setFormData({ name: dog.name || '', registration_number: dog.registration_number || '', breed: dog.breed || '', sex: dog.sex || 'male', birth_date: dog.birth_date || '', color: dog.color || '', microchip: dog.microchip || '', notes: dog.notes || '', sire_id: dog.sire?.id || null, // Ensure null, not '' dam_id: dog.dam?.id || null, // Ensure null, not '' litter_id: dog.litter_id || null // Ensure null, not '' }) setUseManualParents(!dog.litter_id) } }, [dog]) const fetchDogs = async () => { try { const res = await axios.get('/api/dogs') setDogs(res.data || []) } catch (error) { console.error('Error fetching dogs:', error) setDogs([]) } } const fetchLitters = async () => { try { const res = await axios.get('/api/litters') const litterData = res.data || [] setLitters(litterData) setLittersAvailable(litterData.length > 0) // Only default to manual if no litters exist if (litterData.length === 0) { setUseManualParents(true) } } catch (error) { console.error('Error fetching litters:', error) // If endpoint fails, gracefully fallback to manual mode setLitters([]) setLittersAvailable(false) setUseManualParents(true) } } const handleChange = (e) => { const { name, value } = e.target // Convert empty strings to null for ID fields let processedValue = value if (name === 'sire_id' || name === 'dam_id' || name === 'litter_id') { processedValue = value === '' ? null : parseInt(value) } setFormData(prev => ({ ...prev, [name]: processedValue })) // If litter is selected, auto-populate parents if (name === 'litter_id' && value) { const selectedLitter = litters.find(l => l.id === parseInt(value)) if (selectedLitter) { setFormData(prev => ({ ...prev, sire_id: selectedLitter.sire_id, dam_id: selectedLitter.dam_id, breed: prev.breed || selectedLitter.sire_name?.split(' ')[0] || '' })) } } } const handleSubmit = async (e) => { e.preventDefault() setError('') setLoading(true) try { const submitData = { ...formData, // Ensure null values are sent, not empty strings sire_id: formData.sire_id || null, dam_id: formData.dam_id || null, litter_id: useManualParents ? null : (formData.litter_id || null), registration_number: formData.registration_number || null, birth_date: formData.birth_date || null, color: formData.color || null, microchip: formData.microchip || null, notes: formData.notes || null } if (dog) { // Update existing dog await axios.put(`/api/dogs/${dog.id}`, submitData) } else { // Create new dog await axios.post('/api/dogs', submitData) } onSave() onClose() } catch (error) { setError(error.response?.data?.error || 'Failed to save dog') setLoading(false) } } const males = dogs.filter(d => d.sex === 'male' && d.id !== dog?.id) const females = dogs.filter(d => d.sex === 'female' && d.id !== dog?.id) return (