jQuery(document).ready(function($) {
    // Daten aus wp_localize_script
    var data = simpbookDienstleistungenData;

    // ==========================================
    // Suchfunktionalität
    // ==========================================
    var searchTimeout;
    var $searchInput = $('#dienstleistungen-search-input');
    var $clearBtn = $('#clear-search-btn-dienstleistungen');
    
    // Suche durchführen
    function performSearch() {
        var searchTerm = $searchInput.val().toLowerCase().trim();
        
        // Clear-Button anzeigen/ausblenden
        if (searchTerm.length > 0) {
            $clearBtn.show();
        } else {
            $clearBtn.hide();
        }
        
        // Tabellen-Zeilen filtern
        $('.desktop-dienstleistungen-tabelle tbody tr').each(function() {
            var $row = $(this);
            var name = $row.find('td').eq(0).text().toLowerCase(); // Name Spalte
            var kategorie = $row.find('td').eq(1).text().toLowerCase(); // Kategorie
            var beschreibung = $row.attr('data-beschreibung') || '';
            beschreibung = beschreibung.toLowerCase();
            
            if (searchTerm === '' || 
                name.includes(searchTerm) || 
                kategorie.includes(searchTerm) ||
                beschreibung.includes(searchTerm)) {
                $row.show();
            } else {
                $row.hide();
            }
        });
        
        // Karten-Ansicht filtern
        $('.mobile-dienstleistungen-karten .dienstleistung-karte').each(function() {
            var $card = $(this);
            var name = $card.find('.dienstleistung-name').text().toLowerCase();
            var kategorie = $card.find('.dienstleistung-kategorie').text().toLowerCase();
            var beschreibung = $card.attr('data-beschreibung') || '';
            beschreibung = beschreibung.toLowerCase();
            
            if (searchTerm === '' || 
                name.includes(searchTerm) || 
                kategorie.includes(searchTerm) ||
                beschreibung.includes(searchTerm)) {
                $card.show();
            } else {
                $card.hide();
            }
        });
        
        // Keine Ergebnisse Meldung
        updateNoResultsMessage(searchTerm);
    }
    
    // Keine Ergebnisse Meldung
    function updateNoResultsMessage(searchTerm) {
        var $tableBody = $('.desktop-dienstleistungen-tabelle tbody');
        var $cardsContainer = $('.mobile-dienstleistungen-karten');
        var visibleTableRows = $tableBody.find('tr:visible').length;
        var visibleCards = $cardsContainer.find('.dienstleistung-karte:visible').length;
        
        // Entferne alte Meldungen
        $('.no-search-results').remove();
        
        if (searchTerm.length > 0) {
            if (visibleTableRows === 0 && $('.desktop-dienstleistungen-tabelle').hasClass('active')) {
                $tableBody.append(
                    '<tr class="no-search-results">' +
                    '<td colspan="100%" style="text-align: center; padding: 40px; color: #8c8f94;">' +
                    '<span class="dashicons dashicons-search" style="font-size: 48px; opacity: 0.3;"></span><br>' +
                    '<strong>Keine Ergebnisse gefunden</strong><br>' +
                    'Keine Dienstleistungen entsprechen Ihrer Suche nach "' + searchTerm + '"' +
                    '</td>' +
                    '</tr>'
                );
            }
            
            if (visibleCards === 0 && !$cardsContainer.hasClass('hidden')) {
                $cardsContainer.append(
                    '<div class="no-search-results" style="grid-column: 1 / -1; text-align: center; padding: 40px; color: #8c8f94;">' +
                    '<span class="dashicons dashicons-search" style="font-size: 48px; opacity: 0.3;"></span><br>' +
                    '<strong>Keine Ergebnisse gefunden</strong><br>' +
                    'Keine Dienstleistungen entsprechen Ihrer Suche nach "' + searchTerm + '"' +
                    '</div>'
                );
            }
        }
    }
    
    // Event Listener für Sucheingabe
    $searchInput.on('input', function() {
        clearTimeout(searchTimeout);
        searchTimeout = setTimeout(performSearch, 300); // Debounce 300ms
    });
    
    // Clear-Button Funktionalität
    $clearBtn.on('click', function() {
        $searchInput.val('').focus();
        performSearch();
    });
    
    // Enter-Taste für Suche
    $searchInput.on('keypress', function(e) {
        if (e.which === 13) {
            e.preventDefault();
            performSearch();
        }
    });

    // ==========================================
    // View Toggle Funktionalität
    // ==========================================
    var storedView = localStorage.getItem('simpbook_dienstleistungen_card_view');
    var isCardView = storedView === null ? true : (storedView !== 'false'); // Default true beim ersten Besuch
    
    // Initial view setzen
    if (isCardView) {
        switchToCardView();
    } else {
        switchToTableView();
    }
    
    $('#toggle-view-btn').on('click', function() {
        isCardView = !isCardView;
        localStorage.setItem('simpbook_dienstleistungen_card_view', isCardView);
        
        if (isCardView) {
            switchToCardView();
        } else {
            switchToTableView();
        }
        
        // Suche erneut anwenden nach View-Wechsel
        if ($searchInput.val().trim().length > 0) {
            performSearch();
        }
    });
    
    function switchToTableView() {
        $('.desktop-dienstleistungen-tabelle').addClass('active');
        $('.mobile-dienstleistungen-karten').addClass('hidden');
        $('#toggle-view-text').text(simpbookDienstleistungenData.i18n.card_view || 'Kartenansicht');
    }
    
    function switchToCardView() {
        $('.desktop-dienstleistungen-tabelle').removeClass('active');
        $('.mobile-dienstleistungen-karten').removeClass('hidden');
        $('#toggle-view-text').text(simpbookDienstleistungenData.i18n.table_view || 'Tabellenansicht');
    }

    // ==========================================
    // Ohne-Mitarbeiter ↔ Mitarbeiter Gegenseitige Sperre
    // ==========================================
    function updateOhneMitarbeiterUI() {
        var ohneMitarbeiter = $('#edit-ohne-mitarbeiter').is(':checked');
        var hatMitarbeiter = $('#dienstleistung-mitarbeiter-list input[type="checkbox"]:checked').length > 0;

        if (ohneMitarbeiter) {
            // Mitarbeiterliste deaktivieren und ausgrauen
            $('#dienstleistung-mitarbeiter-list')
                .css({ 'opacity': '0.4', 'pointer-events': 'none' })
                .find('input[type="checkbox"]').prop({ 'checked': false, 'disabled': true });
        } else {
            // Mitarbeiterliste wieder aktivieren
            $('#dienstleistung-mitarbeiter-list')
                .css({ 'opacity': '', 'pointer-events': '' })
                .find('input[type="checkbox"]').prop('disabled', false);
        }

        if (hatMitarbeiter && !ohneMitarbeiter) {
            // "Ohne Mitarbeiter" sperren wenn ein Mitarbeiter gewählt ist
            $('#edit-ohne-mitarbeiter').prop('disabled', true)
                .closest('label').css({ 'opacity': '0.4', 'cursor': 'not-allowed' });
        } else {
            // "Ohne Mitarbeiter" freigeben
            $('#edit-ohne-mitarbeiter').prop('disabled', false)
                .closest('label').css({ 'opacity': '', 'cursor': 'pointer' });
        }
    }

    // Wenn "Ohne Mitarbeiter" geändert wird → Mitarbeiterliste sperren/freigeben
    $(document).on('change', '#edit-ohne-mitarbeiter', function() {
        updateOhneMitarbeiterUI();
    });

    // ==========================================
    // Verfügbarkeit (Availability)
    // ==========================================
    var currentLanguage = (simpbookDienstleistungenData.currentLanguage || 'de_DE');
    var dpTrans = simpbookDienstleistungenData.datepickerTranslations || {};

    function convert24to12Avail(time24) {
        if (!time24) return '';
        var parts = time24.split(':');
        var h = parseInt(parts[0], 10);
        var m = parts[1] || '00';
        var ampm = h >= 12 ? 'PM' : 'AM';
        var h12 = h % 12 || 12;
        return (h12 < 10 ? '0' + h12 : h12) + ':' + m + ' ' + ampm;
    }

    function convert12to24Avail(time12) {
        if (!time12) return '';
        var match = time12.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);
        if (!match) return time12;
        var h = parseInt(match[1], 10);
        var m = match[2];
        var ampm = match[3].toUpperCase();
        if (ampm === 'PM' && h !== 12) h += 12;
        if (ampm === 'AM' && h === 12) h = 0;
        return (h < 10 ? '0' + h : h) + ':' + m;
    }

    function setTimeInputValue($inp, val24) {
        if (currentLanguage === 'en_US_AMPM') {
            $inp.attr('type', 'text')
                .attr('pattern', '^(0?[0-9]|1[0-2]):[0-5][0-9]\\s*(AM|PM)$')
                .attr('placeholder', 'HH:MM AM/PM')
                .val(val24 ? convert24to12Avail(val24) : '');
        } else {
            $inp.attr('type', 'time').val(val24 || '');
        }
    }

    function getTimeInputValue($inp) {
        var val = $inp.val();
        if (currentLanguage === 'en_US_AMPM' && $inp.attr('type') === 'text') {
            return convert12to24Avail(val);
        }
        return val || '09:00';
    }

    var availDpAusgeschlossene   = simpbookDienstleistungenData.ausgeschlosseneTage    || [];
    var availDpSpezSchliesstage  = simpbookDienstleistungenData.spezielleSchliesstage  || [];
    var availDpGeschlWochentage  = simpbookDienstleistungenData.geschlosseneWochentage || [];
    var availDpWochentagKeys = ['sonntag', 'montag', 'dienstag', 'mittwoch', 'donnerstag', 'freitag', 'samstag'];

    function initAvailabilityDatepicker() {
        var $dp = $('.simpbook-avail-special-datepicker:not(.hasDatepicker)');
        if (!$dp.length) return;
        var isUS = currentLanguage === 'en_US_AMPM' || (currentLanguage || '').startsWith('en_');
        var fmt = isUS ? 'mm/dd/yy' : 'dd.mm.yy';
        var dpOpts = {
            dateFormat: fmt,
            minDate: 0,
            firstDay: isUS ? 0 : 1,
            beforeShowDay: function(date) {
                var dateISO = $.datepicker.formatDate('yy-mm-dd', date);
                var wochentag = availDpWochentagKeys[date.getDay()];
                var isExcluded     = $.inArray(dateISO, availDpAusgeschlossene)  !== -1;
                var isSpezClosed   = $.inArray(dateISO, availDpSpezSchliesstage) !== -1;
                var isClosed       = $.inArray(wochentag, availDpGeschlWochentage) !== -1;
                var cssClass = '';
                if (isExcluded)   cssClass = 'simpbook-avail-dp-excluded';
                else if (isSpezClosed) cssClass = 'simpbook-avail-dp-spez-closed';
                else if (isClosed) cssClass = 'simpbook-avail-dp-closed';
                // Always selectable — the admin defines special overrides
                return [true, cssClass, ''];
            }
        };
        if (dpTrans.monthNames)      dpOpts.monthNames      = dpTrans.monthNames;
        if (dpTrans.monthNamesShort) dpOpts.monthNamesShort = dpTrans.monthNamesShort;
        if (dpTrans.dayNames)        dpOpts.dayNames        = dpTrans.dayNames;
        if (dpTrans.dayNamesShort)   dpOpts.dayNamesShort   = dpTrans.dayNamesShort;
        if (dpTrans.dayNamesMin)     dpOpts.dayNamesMin     = dpTrans.dayNamesMin;
        $dp.datepicker(dpOpts);
    }

    function buildSpecialDateRow(dateISO, timeFrom, timeTo) {
        var parts = dateISO.split('-');
        var dateObj = new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10));
        var dayNames = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];
        var dayName = dayNames[dateObj.getDay()];
        var displayDate = parts[2] + '.' + parts[1] + '.' + parts[0];
        var tf = timeFrom || '09:00';
        var tt = timeTo   || '17:00';
        var dispFrom = currentLanguage === 'en_US_AMPM' ? convert24to12Avail(tf) : tf;
        var dispTo   = currentLanguage === 'en_US_AMPM' ? convert24to12Avail(tt) : tt;
        var inpType  = currentLanguage === 'en_US_AMPM' ? 'text' : 'time';
        var inpAttrs = currentLanguage === 'en_US_AMPM' ? ' pattern="^(0?[0-9]|1[0-2]):[0-5][0-9]\\s*(AM|PM)$" placeholder="HH:MM AM/PM"' : '';
        return '<div class="simpbook-avail-special-date-row" data-date="' + dateISO + '">' +
            '<span class="simpbook-avail-special-date-display">' + dayName + ', ' + displayDate + '</span>' +
            '<input type="hidden" name="simpbook_special_dates[][date]" value="' + dateISO + '">' +
            '<label>Von <input type="' + inpType + '" class="simpbook-time-input simpbook-avail-sd-from"' + inpAttrs + ' value="' + dispFrom + '"></label>' +
            '<label>Bis <input type="' + inpType + '" class="simpbook-time-input simpbook-avail-sd-to"' + inpAttrs + ' value="' + dispTo + '"></label>' +
            '<button type="button" class="button button-small simpbook-remove-avail-date" style="color:#dc3232; border-color:#dc3232;" title="Entfernen"><span class="dashicons dashicons-trash" style="font-size:14px; vertical-align:middle;"></span></button>' +
            '</div>';
    }

    function resetAvailabilityForm() {
        $('input[name="simpbook_verfuegbarkeit_type"][value="regular"]').prop('checked', true);
        $('.simpbook-avail-option-label').removeClass('active');
        $('input[name="simpbook_verfuegbarkeit_type"][value="regular"]').closest('.simpbook-avail-option-label').addClass('active');
        $('.simpbook-avail-weekdays').hide();
        $('.simpbook-avail-special').hide();
        $('.simpbook-weekday-checkbox').prop('checked', false);
        $('.simpbook-weekday-item .simpbook-time-input').prop('disabled', true);
        if (currentLanguage !== 'en_US_AMPM') {
            $('.simpbook-weekday-item input[name*="[time_from]"]').attr('type', 'time').val('09:00');
            $('.simpbook-weekday-item input[name*="[time_to]"]').attr('type', 'time').val('17:00');
        }
        $('.simpbook-avail-special-dates-list').empty();
        var $dp = $('.simpbook-avail-special-datepicker');
        if ($dp.hasClass('hasDatepicker')) {
            $dp.datepicker('setDate', null).val('');
        }
    }

    function populateAvailabilityForm(verfuegbarkeit) {
        var type = (verfuegbarkeit && verfuegbarkeit.type) ? verfuegbarkeit.type : 'regular';
        var weekday_times = (verfuegbarkeit && verfuegbarkeit.weekday_times) ? verfuegbarkeit.weekday_times : {};
        var special_dates = (verfuegbarkeit && verfuegbarkeit.special_dates) ? verfuegbarkeit.special_dates : [];

        $('input[name="simpbook_verfuegbarkeit_type"]').prop('checked', false);
        $('input[name="simpbook_verfuegbarkeit_type"][value="' + type + '"]').prop('checked', true);
        $('.simpbook-avail-option-label').removeClass('active');
        $('input[name="simpbook_verfuegbarkeit_type"][value="' + type + '"]').closest('.simpbook-avail-option-label').addClass('active');
        $('.simpbook-avail-weekdays').toggle(type === 'weekdays');
        $('.simpbook-avail-special').toggle(type === 'special_dates');

        // Weekdays
        $('.simpbook-weekday-item').each(function() {
            var $item = $(this);
            var nameAttr = $item.find('.simpbook-weekday-checkbox').attr('name') || '';
            var dayMatch = nameAttr.match(/\[(\d)\]\[enabled\]/);
            if (!dayMatch) return;
            var dayNum = dayMatch[1];
            var $check = $item.find('.simpbook-weekday-checkbox');
            var $from  = $item.find('input[name*="[time_from]"]');
            var $to    = $item.find('input[name*="[time_to]"]');
            if (weekday_times[dayNum]) {
                $check.prop('checked', true);
                setTimeInputValue($from, weekday_times[dayNum].time_from || '09:00');
                setTimeInputValue($to,   weekday_times[dayNum].time_to   || '17:00');
                $from.prop('disabled', false);
                $to.prop('disabled', false);
            } else {
                $check.prop('checked', false);
                if (currentLanguage === 'en_US_AMPM') {
                    setTimeInputValue($from, '09:00');
                    setTimeInputValue($to, '17:00');
                } else {
                    $from.attr('type', 'time').val('09:00');
                    $to.attr('type', 'time').val('17:00');
                }
                $from.prop('disabled', true);
                $to.prop('disabled', true);
            }
        });

        // Special dates
        var $list = $('.simpbook-avail-special-dates-list');
        $list.empty();
        if (special_dates && special_dates.length) {
            special_dates.forEach(function(sd) {
                if (sd.date) {
                    $list.append(buildSpecialDateRow(sd.date, sd.time_from, sd.time_to));
                }
            });
            sortSpecialDateList($list);
        }

        initAvailabilityDatepicker();
    }

    // Radio toggle
    $(document).on('change', '.simpbook-avail-radio', function() {
        var val = $(this).val();
        $('.simpbook-avail-weekdays').toggle(val === 'weekdays');
        $('.simpbook-avail-special').toggle(val === 'special_dates');
        $('.simpbook-avail-option-label').removeClass('active');
        $(this).closest('.simpbook-avail-option-label').addClass('active');
        initAvailabilityDatepicker();
    });

    // Weekday checkbox enable/disable time inputs
    $(document).on('change', '.simpbook-weekday-checkbox', function() {
        var $item = $(this).closest('.simpbook-weekday-item');
        var enabled = $(this).is(':checked');
        $item.find('.simpbook-time-input').prop('disabled', !enabled);
    });

    function sortSpecialDateList($list) {
        var $rows = $list.find('.simpbook-avail-special-date-row');
        $rows.sort(function(a, b) {
            return $(a).data('date').localeCompare($(b).data('date'));
        });
        $list.append($rows);
    }

    // Add special date
    $(document).on('click', '.simpbook-add-avail-special-date', function() {
        var $dp = $(this).siblings('.simpbook-avail-special-datepicker');
        if (!$dp.length) $dp = $(this).closest('.simpbook-avail-special-datepicker-wrap').find('.simpbook-avail-special-datepicker');
        var selectedDate = $dp.datepicker('getDate');
        if (!selectedDate) {
            alert('Bitte zuerst ein Datum auswählen.');
            return;
        }
        var dateISO = $.datepicker.formatDate('yy-mm-dd', selectedDate);
        if ($('.simpbook-avail-special-date-row[data-date="' + dateISO + '"]').length) {
            alert('Dieses Datum wurde bereits hinzugefügt.');
            return;
        }
        var $list = $('.simpbook-avail-special-dates-list');
        $list.append(buildSpecialDateRow(dateISO, '09:00', '17:00'));
        sortSpecialDateList($list);
        $dp.datepicker('setDate', null).val('');
    });

    // Remove special date
    $(document).on('click', '.simpbook-remove-avail-date', function() {
        $(this).closest('.simpbook-avail-special-date-row').remove();
    });



    // Wenn ein Mitarbeiter-Checkbox geändert wird → "Ohne Mitarbeiter" sperren/freigeben
    $(document).on('change', '#dienstleistung-mitarbeiter-list input[type="checkbox"]', function() {
        updateOhneMitarbeiterUI();
    });

    // Handler für "Neue Dienstleistung hinzufügen" Button
    $(document).on('click', '#add-new-service-btn', function(e) {
        e.preventDefault();

        // Modal für neue Dienstleistung öffnen
        openServiceModalForNew();
    });

    // Funktion zum Öffnen des Modals für neue Dienstleistung
    function openServiceModalForNew() {
        // Titel ändern
        $('#modal-title').text(data.i18n.add_new_service || 'Neue Dienstleistung hinzufügen');

        // Lösch-Button ausblenden
        $('#modal-delete-section').hide();

        // Speichern-Button Text ändern
        $('#modal-save-btn').text(data.i18n.add_service || 'Dienstleistung hinzufügen');

        // Formular leeren und Standardwerte setzen
        $('#dienstleistung-edit-id').val('');
        $('#edit-name').val('');
        $('#edit-kategorie_id').val(''); // Kategorie zurücksetzen
        $('#edit-dauer_minuten').val('30');
        $('#edit-pufferzeit_minuten').val('0');
        $('#edit-beschreibung').val('');
        $('#edit-sortierung').val('0');
        $('#edit-preis').val('');
        $('#edit-preis_anzeigen').prop('checked', false);
        $('#edit-bild_id').val('0');
        $('#edit-aktiv').prop('checked', true); // Neue Dienstleistungen standardmäßig aktiv
        $('#edit-ohne-mitarbeiter').prop('checked', false);
        // Buchungsoptionen zurücksetzen
        if (data.buchungsoptionenAktiv) {
        $('#buchungsoptionen-container').html('<p class="description" style="font-style: italic; color: #999;">' + (data.i18n.keine_optionen || 'Noch keine Optionen zugewiesen.') + '</p>');
        }

        // Verfügbarkeit zurücksetzen
        resetAvailabilityForm();
        initAvailabilityDatepicker();

        // Bild-Vorschau zurücksetzen
        $('#edit-bild-img').hide();
        $('#edit-remove-image').hide();

        // Mitarbeiter-Liste laden (für neue Dienstleistung keine Vorauswahl)
        var nonce = $('input[name="dienstleistung_nonce"]').val();
        $.ajax({
            url: data.ajaxurl,
            type: 'POST',
            data: {
                action: 'simpbook_get_mitarbeiter_zuweisung_for_dienstleistung',
                simpbook_dienstleistung_id: '', // Leere ID für neue Dienstleistung
                simpbook_nonce: nonce
            },
            success: function(response) {
                if (response.success && response.data && response.data.html) {
                    $('#dienstleistung-mitarbeiter-list').html(response.data.html);
                } else {
                    $('#dienstleistung-mitarbeiter-list').html('<p style="color: red;">' + (data.i18n.error_loading_employees || 'Fehler beim Laden der Mitarbeiter') + '</p>');
                }
                updateOhneMitarbeiterUI();
            },
            error: function() {
                $('#dienstleistung-mitarbeiter-list').html('<p style="color: red;">' + (data.i18n.unknown_error || 'Unbekannter Fehler') + '</p>');
            }
        });

        // Modal anzeigen
        var modalElement = $('#dienstleistung-detail-modal');
        modalElement.removeAttr('style');
        modalElement.css('display', 'flex').hide().fadeIn(200);
    }

    // Zeile klickbar machen - delegated event handler wie bei Reservierungen
    $(document).on('click', '.dienstleistung-row-clickable, .dienstleistung-karte-clickable', function(e) {
        // Verhindere Klick wenn auf Link oder Button geklickt wird
        if ($(e.target).is('a') || $(e.target).closest('a').length ||
            $(e.target).is('button') || $(e.target).closest('button').length) {
            return;
        }

        e.preventDefault();
        e.stopPropagation();

        var $row = $(this);
        var dienstleistungDataStr = $row.attr('data-dienstleistung-data');

        if (!dienstleistungDataStr) {
            console.error('Keine Dienstleistungs-Daten gefunden');
            return;
        }

        var dienstleistungData;
        try {
            dienstleistungData = JSON.parse(dienstleistungDataStr);
        } catch (e) {
            console.error('Fehler beim Parsen der JSON-Daten:', e);
            return;
        }

        var dienstleistungId = $row.attr('data-dienstleistung-id');

        // Fülle das Formular mit den Daten
        $('#dienstleistung-edit-id').val(dienstleistungId);
        $('#edit-name').val(dienstleistungData.name || '');
        $('#edit-kategorie_id').val(dienstleistungData.kategorie_id || ''); // Kategorie setzen
        $('#edit-dauer_minuten').val(dienstleistungData.dauer_minuten || 30);
        $('#edit-pufferzeit_minuten').val(dienstleistungData.pufferzeit_minuten || 0);
        $('#edit-beschreibung').val(dienstleistungData.beschreibung || '');
        $('#edit-sortierung').val(dienstleistungData.sortierung || 0);
        $('#edit-preis').val(dienstleistungData.preis || '');
        $('#edit-preis_anzeigen').prop('checked', dienstleistungData.preis_anzeigen == 1);
        $('#edit-bild_id').val(dienstleistungData.bild_id || 0);
        $('#edit-aktiv').prop('checked', dienstleistungData.aktiv == 1);
        $('#edit-ohne-mitarbeiter').prop('checked', dienstleistungData.ohne_mitarbeiter == 1);

        // Verfügbarkeit befüllen
        populateAvailabilityForm(dienstleistungData.verfuegbarkeit || {type: 'regular', weekday_times: {}, special_dates: []});

        // Buchungsoptionen laden (wenn Feature aktiv)
        if (data.buchungsoptionenAktiv) {
            loadBuchungsoptionen(dienstleistungId);
        }

        // Zeige Bild-Vorschau wenn vorhanden
        if (dienstleistungData.bild_id && dienstleistungData.bild_id > 0) {
            var attachment = wp.media.attachment(dienstleistungData.bild_id);
            attachment.fetch();
            attachment.on('change', function() {
                var imageUrl = attachment.get('url');
                $('#edit-bild-img').attr('src', imageUrl).show();
                $('#edit-remove-image').show();
            });
        } else {
            $('#edit-bild-img').hide();
            $('#edit-remove-image').hide();
        }

        // Lade Mitarbeiter für diese Dienstleistung
        var nonce = $('input[name="dienstleistung_nonce"]').val();
        $.ajax({
            url: data.ajaxurl,
            type: 'POST',
            data: {
                action: 'simpbook_get_mitarbeiter_zuweisung_for_dienstleistung',
                simpbook_dienstleistung_id: dienstleistungId,
                simpbook_nonce: nonce
            },
            success: function(response) {
                if (response.success && response.data && response.data.html) {
                    $('#dienstleistung-mitarbeiter-list').html(response.data.html);
                } else {
                    $('#dienstleistung-mitarbeiter-list').html('<p style="color: red;">' + (data.i18n.error_loading_employees || 'Fehler beim Laden der Mitarbeiter') + '</p>');
                }
                updateOhneMitarbeiterUI();
            },
            error: function() {
                $('#dienstleistung-mitarbeiter-list').html('<p style="color: red;">' + (data.i18n.unknown_error || 'Unbekannter Fehler') + '</p>');
            }
        });

        // Modal für Bearbeitung konfigurieren
        $('#modal-title').text(data.i18n.edit_service || 'Dienstleistung bearbeiten');
        $('#modal-delete-section').show();
        $('#modal-save-btn').text(data.i18n.save || 'Speichern');

        // Modal anzeigen
        var modalElement = $('#dienstleistung-detail-modal');
        if (modalElement.length === 0) {
            console.error('Modal-Element nicht gefunden!');
            if (typeof window.simpbookAlert === 'function') {
                window.simpbookAlert(data.i18n.error_modal_not_found, data.i18n.error_title);
            } else {
                alert(data.i18n.error_modal_not_found);
            }
            return;
        }
        // Zeige Modal mit Animation (wie bei Reservierungen)
        // Entferne inline style, setze display: flex und zeige mit fadeIn
        modalElement.removeAttr('style');
        modalElement.css('display', 'flex').hide().fadeIn(200);
    });

    // Modal schließen
    $(document).on('click', '.reservierung-modal-close, .reservierung-modal-overlay', function() {
        $('#dienstleistung-detail-modal').fadeOut(200);
    });

    // ESC-Taste zum Schließen
    $(document).on('keydown', function(e) {
        if (e.key === 'Escape' && $('#dienstleistung-detail-modal').is(':visible')) {
            $('#dienstleistung-detail-modal').fadeOut(200);
        }
    });

    // Bild-Upload Handler
    var dienstleistung_image_frame;
    $(document).on('click', '#edit-upload-image', function(e) {
        e.preventDefault();

        // Erstelle oder verwende bestehenden Media Frame
        if (dienstleistung_image_frame) {
            dienstleistung_image_frame.open();
            return;
        }

        dienstleistung_image_frame = wp.media.frames.dienstleistung_image = wp.media({
            title: data.i18n.select_image,
            button: {
                text: data.i18n.use_image
            },
            multiple: false,
            library: {
                type: 'image'
            }
        });

        dienstleistung_image_frame.on('select', function() {
            var attachment = dienstleistung_image_frame.state().get('selection').first().toJSON();
            $('#edit-bild_id').val(attachment.id);
            $('#edit-bild-img').attr('src', attachment.url).show();
            $('#edit-remove-image').show();
        });

        dienstleistung_image_frame.open();
    });

    // Bild entfernen Handler
    $(document).on('click', '#edit-remove-image', function(e) {
        e.preventDefault();
        $('#edit-bild_id').val(0);
        $('#edit-bild-img').hide();
        $(this).hide();
    });

    // Formular absenden (delegated event handler für dynamisches Formular)
    $(document).on('submit', '#dienstleistung-edit-form', function(e) {
        e.preventDefault();

        // Sammle alle Form-Felder manuell in einem Objekt
        var formData = {
            action: 'simpbook_save_dienstleistung',
            simpbook_dienstleistung_id: $('#dienstleistung-edit-id').val(),
            simpbook_nonce: $('input[name="dienstleistung_nonce"]').val(),
            simpbook_name: $('#dienstleistung-edit-form input[name="simpbook_name"]').val(),
            simpbook_kategorie_id: $('#dienstleistung-edit-form select[name="simpbook_kategorie_id"]').val(),
            simpbook_dauer_minuten: $('#dienstleistung-edit-form input[name="simpbook_dauer_minuten"]').val(),
            simpbook_pufferzeit_minuten: $('#dienstleistung-edit-form input[name="simpbook_pufferzeit_minuten"]').val(),
            simpbook_beschreibung: $('#dienstleistung-edit-form textarea[name="simpbook_beschreibung"]').val(),
            simpbook_aktiv: $('#dienstleistung-edit-form input[name="simpbook_aktiv"]').is(':checked') ? '1' : '0',
            simpbook_sortierung: $('#dienstleistung-edit-form input[name="simpbook_sortierung"]').val(),
            simpbook_preis: $('#dienstleistung-edit-form input[name="simpbook_preis"]').val(),
            simpbook_preis_anzeigen: $('#dienstleistung-edit-form input[name="simpbook_preis_anzeigen"]').is(':checked') ? '1' : '0',
            simpbook_bild_id: $('#dienstleistung-edit-form input[name="simpbook_bild_id"]').val(),
            simpbook_ohne_mitarbeiter: $('#edit-ohne-mitarbeiter').is(':checked') ? '1' : '0'
        };

        // Sammle alle ausgewählten Mitarbeiter als Array
        var mitarbeiterIds = [];
        $('#dienstleistung-mitarbeiter-list input[type="checkbox"]:checked').each(function() {
            mitarbeiterIds.push($(this).val());
        });

        // Debug-Ausgabe entfernen nach Test
        console.log('Ausgewählte Mitarbeiter:', mitarbeiterIds);

        // Erstelle FormData für Datei-Upload und füge Mitarbeiter hinzu
        var ajaxData = new FormData();
        for (var key in formData) {
            ajaxData.append(key, formData[key]);
        }
        // Mitarbeiter als Array hinzufügen - WICHTIG: Ohne die Klammern im Namen, PHP erkennt das automatisch
        for (var i = 0; i < mitarbeiterIds.length; i++) {
            ajaxData.append('simpbook_mitarbeiter[' + i + ']', mitarbeiterIds[i]);
        }

        // Verfügbarkeit sammeln
        ajaxData.append('simpbook_verfuegbarkeit_type', $('input[name="simpbook_verfuegbarkeit_type"]:checked').val() || 'regular');
        $('.simpbook-weekday-item').each(function() {
            var $item = $(this);
            var nameAttr = $item.find('.simpbook-weekday-checkbox').attr('name') || '';
            var dayMatch = nameAttr.match(/\[(\d)\]\[enabled\]/);
            if (!dayMatch) return;
            var dayNum = dayMatch[1];
            if ($item.find('.simpbook-weekday-checkbox').is(':checked')) {
                ajaxData.append('simpbook_weekday_times[' + dayNum + '][enabled]', '1');
                ajaxData.append('simpbook_weekday_times[' + dayNum + '][time_from]', getTimeInputValue($item.find('input[name*="[time_from]"]')));
                ajaxData.append('simpbook_weekday_times[' + dayNum + '][time_to]',   getTimeInputValue($item.find('input[name*="[time_to]"]')));
            }
        });
        var sdIdx = 0;
        $('.simpbook-avail-special-date-row').each(function() {
            var $row = $(this);
            var dateISO = $row.data('date');
            if (!dateISO) return;
            ajaxData.append('simpbook_special_dates[' + sdIdx + '][date]',      dateISO);
            ajaxData.append('simpbook_special_dates[' + sdIdx + '][time_from]', getTimeInputValue($row.find('.simpbook-avail-sd-from')));
            ajaxData.append('simpbook_special_dates[' + sdIdx + '][time_to]',   getTimeInputValue($row.find('.simpbook-avail-sd-to')));
            sdIdx++;
        });

        // Buchungsoptionen sammeln (wenn Feature aktiv)
        if (data.buchungsoptionenAktiv) {
            $('#buchungsoptionen-container .buchungsoption-row').each(function(idx) {
                var boId    = $(this).find('.buchungsoption-id-select').val();
                var boPreis = $(this).find('.buchungsoption-preis-input').val();
                if (boId) {
                    ajaxData.append('simpbook_buchungsoption_ids[' + idx + ']', boId);
                    ajaxData.append('simpbook_buchungsoption_preise[' + idx + ']', boPreis || '');
                }
            });
        }

        $.ajax({
            url: data.ajaxurl,
            type: 'POST',
            data: ajaxData,
            processData: false,
            contentType: false,
            success: function(response) {
                if (response.success) {
                    location.reload();
                } else {
                    alert(response.data || data.i18n.error_saving);
                }
            },
            error: function(xhr, status, error) {
                console.error('AJAX Error:', status, error, xhr.responseText);
                alert(data.i18n.unknown_error);
            }
        });
    });

    // ==========================================
    // Buchungsoptionen im Service-Modal
    // ==========================================
    function loadBuchungsoptionen(dienstleistungId) {
        var $container = $('#buchungsoptionen-container');
        $container.html('<p style="color:#999; font-style:italic;">' + (data.i18n.loading_employees || 'Lade...') + '</p>');

        $.ajax({
            url: data.ajaxurl,
            type: 'POST',
            data: {
                action: 'simpbook_get_dienstleistung_buchungsoptionen',
                simpbook_dienstleistung_id: dienstleistungId,
                simpbook_nonce: $('input[name="dienstleistung_nonce"]').val()
            },
            success: function(response) {
                if (response.success && response.data) {
                    renderBuchungsoptionenList(response.data.assigned, response.data.all);
                } else {
                    $container.html('<p style="color:#999; font-style:italic;">' + (data.i18n.keine_optionen || 'Noch keine Optionen zugewiesen.') + '</p>');
                }
            },
            error: function() {
                $container.html('<p style="color:red;">' + (data.i18n.unknown_error || 'Fehler beim Laden.') + '</p>');
            }
        });
    }

    function renderBuchungsoptionenList(assigned, allOptions) {
        var $container = $('#buchungsoptionen-container');
        $container.empty();

        if (!assigned || assigned.length === 0) {
            $container.html('<p style="color:#999; font-style:italic;">' + (data.i18n.keine_optionen || 'Noch keine Optionen zugewiesen.') + '</p>');
            return;
        }

        assigned.forEach(function(item) {
            $container.append(buildBuchungsoptionRow(item.buchungsoption_id, item.preis, allOptions, item.name, item.dauer_minuten));
        });
    }

    function buildBuchungsoptionRow(selectedId, preis, allOptions, name, dauerMinuten) {
        var label = name ? (name + ' (' + dauerMinuten + ' Min.)') : '';
        var selectHtml = '<select class="buchungsoption-id-select" style="flex: 1; min-width: 140px;">';
        selectHtml += '<option value="">' + (data.i18n.option_auswaehlen || '— Option wählen —') + '</option>';
        if (allOptions && allOptions.length) {
            allOptions.forEach(function(opt) {
                var selected = (opt.id == selectedId) ? ' selected' : '';
                selectHtml += '<option value="' + opt.id + '"' + selected + '>' + opt.name + ' (' + opt.dauer_minuten + ' Min.)</option>';
            });
        }
        selectHtml += '</select>';

        var $row = $('<div class="buchungsoption-row" style="display:flex; gap:8px; align-items:center; margin-bottom:6px; flex-wrap:wrap;"></div>');
        $row.append(selectHtml);
        $row.append('<input type="text" class="buchungsoption-preis-input small-text" value="' + (preis || '') + '" placeholder="' + (data.i18n.preis_placeholder || 'z.B. 49,99') + '" style="width:120px;">');
        $row.append('<button type="button" class="button button-small buchungsoption-row-remove-btn" title="Entfernen"><span class="dashicons dashicons-trash" style="font-size:14px; vertical-align:middle;"></span></button>');
        return $row;
    }

    // "Option hinzufügen" – lädt erst alle Optionen und fügt dann eine leere Zeile ein
    $(document).on('click', '#add-buchungsoption-row-btn', function() {
        var $container = $('#buchungsoptionen-container');
        // Leere p-Nachrichten entfernen
        $container.find('p').remove();

        $.ajax({
            url: data.ajaxurl,
            type: 'POST',
            data: {
                action: 'simpbook_get_buchungsoptionen',
                simpbook_nonce: $('input[name="dienstleistung_nonce"]').val()
            },
            success: function(response) {
                if (response.success && response.data && response.data.optionen && response.data.optionen.length > 0) {
                    $container.append(buildBuchungsoptionRow('', '', response.data.optionen));
                } else {
                    if (typeof window.simpbookAlert === 'function') {
                        window.simpbookAlert(data.i18n.keine_optionen || 'Noch keine globalen Optionen angelegt. Bitte zuerst unter "Optionen" Vorlagen erstellen.', data.i18n.error_title || 'Hinweis');
                    } else {
                        alert(data.i18n.keine_optionen || 'Noch keine globalen Optionen angelegt. Bitte zuerst unter "Optionen" Vorlagen erstellen.');
                    }
                }
            }
        });
    });

    // Buchungsoption-Zeile entfernen
    $(document).on('click', '.buchungsoption-row-remove-btn', function() {
        $(this).closest('.buchungsoption-row').remove();
        if ($('#buchungsoptionen-container').children('.buchungsoption-row').length === 0) {
            $('#buchungsoptionen-container').html('<p style="color:#999; font-style:italic;">' + (data.i18n.keine_optionen || 'Noch keine Optionen zugewiesen.') + '</p>');
        }
    });

    // ==========================================
    // Drag-and-Drop Sortierung (Kartenansicht)
    // ==========================================
    function initSortable() {
        $('.dienstleistung-karten-gruppe').each(function() {
            var $gruppe = $(this);
            
            $gruppe.sortable({
                handle: '.simpbook-drag-handle',
                items: '.dienstleistung-karte',
                cursor: 'move',
                opacity: 0.6,
                placeholder: 'simpbook-sortable-placeholder',
                tolerance: 'pointer',
                forcePlaceholderSize: true,
                revert: 150,
                helper: 'original',
                cancel: '',
                delay: 0,
                distance: 1,
                scroll: true,
                start: function(e, ui) {
                    ui.item.css({
                        'transition': 'none',
                        'transform': 'none',
                        'z-index': 9999,
                        'pointer-events': 'none'
                    });
                    ui.placeholder.height(ui.item.outerHeight());
                    ui.placeholder.width(ui.item.outerWidth());
                },
                stop: function(e, ui) {
                    ui.item.css({
                        'transition': '',
                        'transform': '',
                        'z-index': '',
                        'pointer-events': ''
                    });
                    
                    var $gruppe = $(this);
                    var ids = [];
                    $gruppe.find('.dienstleistung-karte').each(function() {
                        ids.push($(this).data('dienstleistung-id'));
                    });
                    
                    $.ajax({
                        url: data.ajaxurl,
                        type: 'POST',
                        data: {
                            action: 'simpbook_reorder_dienstleistungen',
                            simpbook_nonce: data.reorderNonce,
                            simpbook_ids: ids
                        },
                        error: function() {
                            console.error('Fehler beim Speichern der Reihenfolge');
                        }
                    });
                }
            });
        });
    }
    initSortable();

    // Drag-Handle: Alle Maus-Events stoppen, damit sie nicht zur Karte durchdringen
    $(document).on('mousedown', '.simpbook-drag-handle, .simpbook-duplicate-btn', function(e) {
        e.stopPropagation();
    });
    $(document).on('click', '.simpbook-drag-handle, .simpbook-duplicate-btn', function(e) {
        e.stopPropagation();
    });

    // Duplizieren
    $(document).on('click', '.simpbook-duplicate-btn', function(e) {
        e.preventDefault();
        var $btn = $(this);
        var id = $btn.data('dienstleistung-id');
        var nonce = $btn.data('nonce');

        $btn.prop('disabled', true);

        $.ajax({
            url: data.ajaxurl,
            type: 'POST',
            data: {
                action: 'simpbook_duplicate_dienstleistung',
                simpbook_id: id,
                simpbook_nonce: nonce
            },
            success: function(response) {
                if (response.success) {
                    window.location.reload();
                } else {
                    $btn.prop('disabled', false);
                }
            },
            error: function() {
                $btn.prop('disabled', false);
            }
        });
    });

    // Löschen
    $(document).on('click', '#dienstleistung-delete', function(e) {
        e.preventDefault();
        var dienstleistungId = $('#dienstleistung-edit-id').val();

        if (!dienstleistungId || dienstleistungId == 0) {
            alert(data.i18n.select_service_first);
            return;
        }

        // Hole Nonce aus dem geklickten Row oder Karte
        var row = $('.dienstleistung-row-clickable[data-dienstleistung-id="' + dienstleistungId + '"], .dienstleistung-karte-clickable[data-dienstleistung-id="' + dienstleistungId + '"]');
        var nonce = row.attr('data-delete-nonce');

        if (!nonce) {
            if (typeof window.simpbookAlert === 'function') {
                window.simpbookAlert(data.i18n.security_token_missing, data.i18n.error_title);
            } else {
                alert(data.i18n.security_token_missing);
            }
            return;
        }

        var confirmMessage = data.i18n.confirm_delete;
        var confirmTitle = data.i18n.confirmation_title;

        if (typeof window.simpbookConfirm === 'function') {
            window.simpbookConfirm(confirmMessage, confirmTitle).then(function(confirmed) {
                if (confirmed) {
                    $.ajax({
                        url: data.ajaxurl,
                        type: 'POST',
                        data: {
                            action: 'simpbook_delete_dienstleistung',
                            simpbook_id: dienstleistungId,
                            simpbook_nonce: nonce
                        },
                        success: function(response) {
                            if (response && response.success) {
                                location.reload();
                            } else {
                                var errorMsg = (response && response.data) ? response.data : data.i18n.error_deleting;
                                if (typeof window.simpbookAlert === 'function') {
                                    window.simpbookAlert(errorMsg, data.i18n.error_title);
                                } else {
                                    alert(errorMsg);
                                }
                            }
                        },
                        error: function(xhr, status, error) {
                            console.error('AJAX Error:', status, error);
                            console.error('Response:', xhr.responseText);
                            var errorMsg = data.i18n.unknown_error;
                            if (xhr.responseJSON && xhr.responseJSON.data) {
                                errorMsg = xhr.responseJSON.data;
                            }
                            if (typeof window.simpbookAlert === 'function') {
                                window.simpbookAlert(errorMsg, data.i18n.error_title);
                            } else {
                                alert(errorMsg);
                            }
                        }
                    });
                }
            });
        } else {
            // Fallback zu Browser confirm
            if (confirm(confirmMessage)) {
                $.ajax({
                    url: data.ajaxurl,
                    type: 'POST',
                    data: {
                        action: 'simpbook_delete_dienstleistung',
                        simpbook_id: dienstleistungId,
                        simpbook_nonce: nonce
                    },
                    success: function(response) {
                        if (response && response.success) {
                            location.reload();
                        } else {
                            var errorMsg = (response && response.data) ? response.data : data.i18n.error_deleting;
                            alert(errorMsg);
                        }
                    },
                    error: function(xhr, status, error) {
                        console.error('AJAX Error:', status, error);
                        console.error('Response:', xhr.responseText);
                        var errorMsg = data.i18n.unknown_error;
                        if (xhr.responseJSON && xhr.responseJSON.data) {
                            errorMsg = xhr.responseJSON.data;
                        }
                        alert(errorMsg);
                    }
                });
            }
        }
    });
});

