'use client' import React, { useEffect, useState } from 'react' import { useSession } from 'next-auth/react' import { useRouter } from 'next/navigation' import Link from 'next/link' import Cookies from 'js-cookie' interface Address { id: string street: string city: string postcode: string order: number } interface Route { id: string name: string | null status: string addresses: Address[] } interface PageProps { params: Promise<{ id: string }> } export default function EditRoutePage({ params }: PageProps) { const routeId = React.use(params).id const router = useRouter() const { data: session, status } = useSession() const [route, setRoute] = useState(null) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [currentAddress, setCurrentAddress] = useState('') const [suggestedAddresses, setSuggestedAddresses] = useState([]) const [isSaving, setIsSaving] = useState(false) const [messages, setMessages] = useState(null) useEffect(() => { const loadMessages = async () => { const lang = Cookies.get('NEXT_LOCALE') || 'de' const messages = await import(`@/messages/${lang}.json`) setMessages(messages.default) } loadMessages() }, []) useEffect(() => { fetchRoute() }, [routeId]) const fetchRoute = async () => { try { const response = await fetch(`/api/routes/${routeId}`, { credentials: 'include' }) if (!response.ok) { throw new Error(messages?.editRoute?.notFound || 'Rota bulunamadı') } const data = await response.json() setRoute(data) } catch (err) { console.error('Rota getirme hatası:', err) setError(err instanceof Error ? err.message : messages?.editRoute?.error || 'Rota yüklenirken bir hata oluştu') } finally { setLoading(false) } } const fetchAddressSuggestions = async (term: string) => { if (term.length < 3) { setSuggestedAddresses([]) return } try { const response = await fetch(`/api/address-suggestions?q=${encodeURIComponent(term)}`) if (!response.ok) { throw new Error(messages?.editRoute?.noResults || 'Adres önerileri alınamadı') } const suggestions = await response.json() setSuggestedAddresses(suggestions) } catch (error) { console.error('Adres önerileri hatası:', error) } } const handleAddAddress = () => { if (!route || !currentAddress.trim()) return // Adresi parçalara ayır const parts = currentAddress.split(',').map(part => part.trim()) const streetPart = parts[0] || '' const locationPart = parts[1] || '' // Posta kodu ve şehir bilgisini ayır const locationMatch = locationPart.match(/(\d{4})\s+([^0]+)/) const postcode = locationMatch ? locationMatch[1] : '' const city = locationMatch ? locationMatch[2].replace(/\s*0+$/, '').trim() : '' // Sondaki 0000'ları temizle const newAddresses = [...route.addresses, { id: `temp-${Date.now()}`, street: streetPart, city: city, postcode: postcode, order: route.addresses.length }] setRoute({ ...route, addresses: newAddresses }) setCurrentAddress('') setSuggestedAddresses([]) } const handleRemoveAddress = (index: number) => { if (!route) return const newAddresses = route.addresses.filter((_, i) => i !== index) // Sıralamayı güncelle newAddresses.forEach((addr, i) => { addr.order = i }) setRoute({ ...route, addresses: newAddresses }) } const handleMoveAddress = (index: number, direction: 'up' | 'down') => { if (!route) return const newAddresses = [...route.addresses] if (direction === 'up' && index > 0) { [newAddresses[index], newAddresses[index - 1]] = [newAddresses[index - 1], newAddresses[index]] } else if (direction === 'down' && index < newAddresses.length - 1) { [newAddresses[index], newAddresses[index + 1]] = [newAddresses[index + 1], newAddresses[index]] } // Sıralamayı güncelle newAddresses.forEach((addr, i) => { addr.order = i }) setRoute({ ...route, addresses: newAddresses }) } const handleSave = async () => { if (!route) return setIsSaving(true) try { const response = await fetch(`/api/routes/${routeId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ addresses: route.addresses }) }) if (!response.ok) { throw new Error(messages?.editRoute?.saveError || 'Rota güncellenemedi') } router.push('/dashboard/routes') } catch (err) { console.error('Rota güncelleme hatası:', err) setError(err instanceof Error ? err.message : messages?.editRoute?.saveError || 'Rota güncellenirken bir hata oluştu') } finally { setIsSaving(false) } } if (!messages || status === 'loading' || loading) { return (
) } if (status === 'unauthenticated') { router.push('/auth/login') return null } if (error || !route) { return (

{messages.common.error}

{error || messages.editRoute.notFound}

) } return (

{messages.editRoute.title}

{messages.editRoute.cancel}
{/* Adres Arama */}
{ setCurrentAddress(e.target.value) fetchAddressSuggestions(e.target.value) }} className="w-full p-3 border-2 border-gray-300 rounded-lg text-gray-800 font-medium placeholder-gray-500 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-200 transition-colors duration-200" placeholder={messages.editRoute.searchPlaceholder} /> {suggestedAddresses.length > 0 && (
    {suggestedAddresses.map((address, index) => (
  • { setCurrentAddress(address) setSuggestedAddresses([]) }} > {address}
  • ))}
)}
{/* Adres Listesi */}

{messages.editRoute.addresses}

    {route.addresses.map((address, index) => (
  • {index + 1}. {address.street}
  • ))}
) }