import { NextRequest, NextResponse } from 'next/server'; import { query } from '@/lib/db'; function parseGermanPrice(priceStr: any): number | null { if (!priceStr) return null; if (typeof priceStr === 'number') return Math.round(priceStr); let cleaned = String(priceStr).replace(/[^0-9.,]/g, '').trim(); if (!cleaned) return null; if (cleaned.includes('.') && !cleaned.includes(',')) { cleaned = cleaned.replace(/\./g, ''); } else if (cleaned.includes('.') && cleaned.includes(',')) { cleaned = cleaned.replace(/\./g, '').replace(',', '.'); } else if (cleaned.includes(',')) { cleaned = cleaned.replace(',', '.'); } const parsed = parseFloat(cleaned); return isNaN(parsed) ? null : Math.round(parsed); } export async function POST(req: NextRequest) { try { const body = await req.json().catch(() => ({})); const { searchParams } = new URL(req.url); const hotelId = searchParams.get('hotelId') || body.hotelId; if (!hotelId) { return NextResponse.json({ success: false, error: 'hotelId fehlt' }, { status: 400 }); } const numericPrice = parseGermanPrice(body.price); // 1. In hotel_price_history eintragen mit echten Spalten if (numericPrice !== null && numericPrice > 0) { try { await query( `INSERT INTO hotel_price_history (hotel_id, price_numeric, price_raw, currency, nights, persons, tracked_at) VALUES ($1::uuid, $2, $3, 'EUR', $4, $5, NOW())`, [hotelId, numericPrice, String(body.price || ''), body.nights || 1, body.persons || 2] ); } catch (err: any) { console.error('DB Insert Error (hotel_price_history):', err.message); } } // 2. Stammdaten aktualisieren try { await query( `UPDATE hotels SET name = COALESCE($1, name), rating = COALESCE($2, rating), review_count = COALESCE($3, review_count), address = COALESCE($4, address), image_url = COALESCE($5, image_url), room_size_m2 = COALESCE($6, room_size_m2), updated_at = NOW() WHERE id = $7::uuid`, [ body.hotelName || null, body.rating || null, body.reviewCount || null, body.address || null, body.image || null, body.roomSizeM2 || null, hotelId ] ); } catch (err: any) { console.error('DB Update Error (hotels):', err.message); } return NextResponse.json({ success: true, hotelId, parsedPrice: numericPrice }); } catch (error: any) { console.error('Allgemeiner Fehler im Webhook:', error.message); return NextResponse.json({ success: false, error: error.message }, { status: 200 }); } }