import { createSignal, onMount, onCleanup, type Component } from 'solid-js';
import UniversalBookingForm from '../booking/UniversalBookingForm';
import type { HeroContent } from '@components/home/hero/HeroContent';
import type { Car } from '../home/slider/SliderContent';

interface FleetBookingWrapperProps {
    content: string | HeroContent; // Принимаем как строку, так и объект
}

export const FleetBookingWrapper: Component<FleetBookingWrapperProps> = (props) => {
    // Парсим контент, если он передан в виде строки
    let content: HeroContent;
    try {
        content = typeof props.content === 'string' ? JSON.parse(props.content) : props.content;
    } catch (error) {
        console.error('Error parsing content in FleetBookingWrapper:', error);
        // В случае ошибки парсинга используем пустой объект или стандартный контент
        content = {
            title: 'Minivan & Privat-Transfers in Berlin',
            description: 'Bequeme und zuverlässige Transfers zum Flughafen, Stadtrundfahrten und Reisen durch Deutschland. Buchen Sie Ihre Fahrt mit nur wenigen Klicks!',
            bookByEmail: 'Per E-Mail buchen',
            contactWhatsApp: 'Kontakt per WhatsApp',
            emailModalTitle: 'Vollständiges Buchungsformular',
            whatsappModalTitle: 'Schneller Kontakt',
            whatsappDirectMessage: 'Hallo, ich interessiere mich für Ihre Dienstleistungen und habe eine Frage.',
            pickupDetailsTitle: 'Abholdetails',
            dropoffDetailsTitle: 'Zielortdetails',
            pickup: 'Abholort',
            pickupPlaceholder: 'z.B. Flughafen Berlin Brandenburg, Hotel Adlon oder Müllerstraße 123',
            dropoff: 'Zielort',
            dropoffPlaceholder: 'z.B. Hotel Adlon, Berlin Hauptbahnhof oder Potsdamer Platz',
            date: 'Datum',
            time: 'Uhrzeit',
            passengers: 'Passagiere',
            phone: 'Telefonnummer',
            name: 'Ihr Name',
            message: 'Ihre Nachricht',
            messagePlaceholder: 'Hallo, ich möchte einen Transfer buchen...',
            additionalInfo: 'Zusätzliche Informationen',
            additionalInfoPlaceholder: 'z.B. Flugnummer, Kindersitz, Gepäck, Treffpunkt',
            multipleVans: 'mehrere Vans',
            checkAvailability: 'Verfügbarkeit prüfen',
            sendMessage: 'Nachricht senden',
            applyDiscountLabel: 'Ich möchte den 20% Aktions-Rabatt anwenden',
            fieldRequired: 'Dieses Feld ist erforderlich',
            dateMustBeFuture: 'Das Datum muss in der Zukunft liegen',
            dropoffDateBeforePickup: 'Das Rückgabedatum darf nicht vor dem Abholdatum liegen',
            invalidPhone: 'Bitte geben Sie eine gültige Telefonnummer ein (z.B. +49 123 4567890)',
            bookingSubmitted: 'Vielen Dank! Ihre Anfrage wurde gesendet. Wir melden uns bald bei Ihnen.',
            selectOption: 'Auswählen...',
            addressCannotBeOnlyNumbers: 'Die Adresse darf nicht nur aus Zahlen bestehen. Bitte geben Sie einen Ortsnamen, Straßennamen oder eine bekannte Landmarke ein.',
            addressMustContainLetters: 'Die Adresse muss Buchstaben enthalten (z.B. Straße, Stadt oder Ort).',
            invalidName: 'Nur Buchstaben und Leerzeichen erlaubt (z.B. Max Mustermann).',
            somethingWentWrong: 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.',
            messageSentSuccess: 'Ihre Nachricht wurde erfolgreich gesendet!',
            messageTooLong: 'Die Nachricht darf die maximale Länge von {maxChars} Zeichen nicht überschreiten.',
            stats: []
        } as HeroContent;
    }

    // Состояние для выбранной машины
    const [selectedCar, setSelectedCar] = createSignal<Car | undefined>(undefined);

    // Обработчик события выбора машины
    const handleSetCar = (event: CustomEvent) => {
        if (event.detail) {
            console.log('FleetBookingWrapper received car:', event.detail);
            setSelectedCar(event.detail);
        }
    };

    onMount(() => {
        // Проверяем, есть ли уже сохранённая машина в глобальном хранилище
        const globalCar = (window as any).currentSelectedCar as Car | undefined;
        if (globalCar) {
            setSelectedCar(globalCar);
            // Удаляем данные из глобального хранилища, чтобы избежать повторного использования
            (window as any).currentSelectedCar = undefined;
        }

        // Подписываемся на кастомное событие
        window.addEventListener('set-fleet-car', handleSetCar as EventListener);
    });

    onCleanup(() => {
        window.removeEventListener('set-fleet-car', handleSetCar as EventListener);
    });

    return (
        <UniversalBookingForm
            content={content}
            car={selectedCar()}
            formType="action"
        />
    );
};

export default FleetBookingWrapper;