import { useState, useEffect } from 'react' import { weatherApi, accommodationsApi } from '../../api/client' import { isDayInAccommodationRange } from '../../utils/dayOrder' /** Day-detail data + accommodation logic: weather load, accommodations list, * hotel picker form state and create/update/delete handlers. */ export function useDayDetail(day: any, days: any, tripId: any, lat: any, lng: any, language: any, onAccommodationChange: any) { const [weather, setWeather] = useState(null) const [loading, setLoading] = useState(false) const [accommodation, setAccommodation] = useState(null) const [dayAccommodations, setDayAccommodations] = useState([]) const [accommodations, setAccommodations] = useState([]) const [showHotelPicker, setShowHotelPicker] = useState(false) const [hotelDayRange, setHotelDayRange] = useState({ start: day?.id, end: day?.id }) const [hotelCategoryFilter, setHotelCategoryFilter] = useState('') const [hotelForm, setHotelForm] = useState({ check_in: '', check_in_end: '', check_out: '', confirmation: '', place_id: null }) useEffect(() => { if (!day?.date || !lat || !lng) { setWeather(null); return } setLoading(true) weatherApi.getDetailed(lat, lng, day.date, language) .then(data => setWeather(data.error ? null : data)) .catch(() => setWeather(null)) .finally(() => setLoading(false)) }, [day?.date, lat, lng, language]) useEffect(() => { if (!tripId) return accommodationsApi.list(tripId) .then(data => { setAccommodations(data.accommodations || []) const allForDay = (data.accommodations || []).filter(a => day ? isDayInAccommodationRange(day, a.start_day_id, a.end_day_id, days) : false ) setDayAccommodations(allForDay) setAccommodation(allForDay[0] || null) }) .catch(() => {}) }, [tripId, day?.id]) useEffect(() => { if (day) setHotelDayRange({ start: day.id, end: day.id }) }, [day?.id]) const handleSelectPlace = (placeId) => { setHotelForm(f => ({ ...f, place_id: placeId })) } const handleSaveAccommodation = async () => { if (!hotelForm.place_id) return try { const data = await accommodationsApi.create(tripId, { place_id: hotelForm.place_id, start_day_id: hotelDayRange.start, end_day_id: hotelDayRange.end, check_in: hotelForm.check_in || null, check_in_end: hotelForm.check_in_end || null, check_out: hotelForm.check_out || null, confirmation: hotelForm.confirmation || null, }) const newAcc = data.accommodation const updated = [...accommodations, newAcc] setAccommodations(updated) setAccommodation(newAcc) setDayAccommodations(updated.filter(a => day ? isDayInAccommodationRange(day, a.start_day_id, a.end_day_id, days) : false )) setShowHotelPicker(false) setHotelForm({ check_in: '', check_in_end: '', check_out: '', confirmation: '', place_id: null }) onAccommodationChange?.() } catch {} } const updateAccommodationField = async (field, value) => { if (!accommodation) return try { const data = await accommodationsApi.update(tripId, accommodation.id, { [field]: value || null }) setAccommodation(data.accommodation) onAccommodationChange?.() } catch {} } const handleRemoveAccommodation = async () => { if (!accommodation) return try { await accommodationsApi.delete(tripId, accommodation.id) const updated = accommodations.filter(a => a.id !== accommodation.id) setAccommodations(updated) setDayAccommodations(updated.filter(a => day ? isDayInAccommodationRange(day, a.start_day_id, a.end_day_id, days) : false )) setAccommodation(null) onAccommodationChange?.() } catch {} } return { weather, loading, accommodation, setAccommodation, dayAccommodations, setDayAccommodations, accommodations, setAccommodations, showHotelPicker, setShowHotelPicker, hotelDayRange, setHotelDayRange, hotelCategoryFilter, setHotelCategoryFilter, hotelForm, setHotelForm, handleSelectPlace, handleSaveAccommodation, updateAccommodationField, handleRemoveAccommodation, } }