'use client'; import React, { useState } from 'react'; import { Edit2, Save, X, Info, Tag, FlaskConical, CircleDollarSign, Search, Loader2, ExternalLink } from 'lucide-react'; import { updateBottle } from '@/services/update-bottle'; import { discoverWhiskybaseId } from '@/services/discover-whiskybase'; import { useI18n } from '@/i18n/I18nContext'; interface EditBottleFormProps { bottle: { id: string; name: string; distillery: string; category: string; abv: number; age: number; whiskybase_id: string | null; purchase_price?: number | null; distilled_at?: string | null; bottled_at?: string | null; batch_info?: string | null; }; onComplete?: () => void; } export default function EditBottleForm({ bottle, onComplete }: EditBottleFormProps) { const { t, locale } = useI18n(); const [isEditing, setIsEditing] = useState(false); const [isSaving, setIsSaving] = useState(false); const [isSearching, setIsSearching] = useState(false); const [error, setError] = useState(null); const [discoveryResult, setDiscoveryResult] = useState<{ id: string; url: string; title: string } | null>(null); const [formData, setFormData] = useState({ name: bottle.name, distillery: bottle.distillery || '', category: bottle.category || '', abv: bottle.abv || 0, age: bottle.age || 0, whiskybase_id: bottle.whiskybase_id || '', purchase_price: bottle.purchase_price || '', distilled_at: bottle.distilled_at || '', bottled_at: bottle.bottled_at || '', batch_info: bottle.batch_info || '', }); const handleDiscover = async () => { setIsSearching(true); setError(null); setDiscoveryResult(null); const result = await discoverWhiskybaseId({ name: formData.name, distillery: formData.distillery, abv: formData.abv, age: formData.age, distilled_at: formData.distilled_at || undefined, bottled_at: formData.bottled_at || undefined, batch_info: formData.batch_info || undefined, }); if (result.success && result.id) { setDiscoveryResult({ id: result.id!, url: result.url!, title: result.title! }); } else { setError(result.error || t('bottle.noMatchFound')); } setIsSearching(false); }; const applyDiscovery = () => { if (discoveryResult) { setFormData({ ...formData, whiskybase_id: discoveryResult.id }); setDiscoveryResult(null); } }; const handleSave = async () => { setIsSaving(true); setError(null); try { const response = await updateBottle(bottle.id, { ...formData, abv: Number(formData.abv), age: formData.age ? Number(formData.age) : undefined, purchase_price: formData.purchase_price ? Number(formData.purchase_price) : undefined, distilled_at: formData.distilled_at || undefined, bottled_at: formData.bottled_at || undefined, batch_info: formData.batch_info || undefined, }); if (response.success) { setIsEditing(false); if (onComplete) onComplete(); } else { setError(response.error || t('common.error')); } } catch (err) { setError(t('common.error')); } finally { setIsSaving(false); } }; if (!isEditing) { return (
{bottle.purchase_price && (
{t('bottle.priceLabel')}: {parseFloat(bottle.purchase_price.toString()).toLocaleString(locale === 'de' ? 'de-DE' : 'en-US', { style: 'currency', currency: 'EUR' })}
)}
); } return (

{t('bottle.editTitle')}

setFormData({ ...formData, name: e.target.value })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" />
setFormData({ ...formData, distillery: e.target.value })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" />
setFormData({ ...formData, category: e.target.value })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" />
setFormData({ ...formData, abv: parseFloat(e.target.value) })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" />
setFormData({ ...formData, age: parseInt(e.target.value) })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" />
setFormData({ ...formData, whiskybase_id: e.target.value })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" /> {discoveryResult && (

Treffer gefunden:

{discoveryResult.title}

{t('common.check')}
)}
setFormData({ ...formData, purchase_price: e.target.value })} className="w-full px-4 py-2 bg-amber-50 dark:bg-amber-900/10 border border-amber-200 dark:border-amber-900/30 rounded-xl outline-none focus:ring-2 focus:ring-amber-500 font-bold text-amber-700 dark:text-amber-400" />
setFormData({ ...formData, distilled_at: e.target.value })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" />
setFormData({ ...formData, bottled_at: e.target.value })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" />
setFormData({ ...formData, batch_info: e.target.value })} className="w-full px-4 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl outline-none focus:ring-2 focus:ring-amber-500" />
{error &&

{error}

}
); }