/**
 * Preiswecker‑Chart mit Zeitfilter (3 / 6 Monate) und Formular‑Interaktion
 * -----------------------------------------------------------------------
 * – zeichnet einen Google AreaChart aus den via wp_localize_script
 *   übergebenen Daten
 * – filtert die Daten client‑seitig, sobald die Range‑Buttons geklickt werden
 * – bleibt vollständig responsive
 */
(function ($) {
    /* --------------------------------------------------
     * Hilfsfunktionen
     * -------------------------------------------------- */

    // Wandelt das PHP‑JSON in ein Google‑DataTable um
    function buildDataTable(arr) {
        const dt = new google.visualization.DataTable();
        dt.addColumn('date',   'Datum');
        dt.addColumn('number', 'Preis');
        dt.addColumn({ role: 'tooltip', type: 'string' });

        arr.forEach(r => {
            const parts = r[0].split('-');            // 'YYYY-MM-DD'
            const date  = new Date(parts[0], parts[1] - 1, parts[2]);
            dt.addRow([date, r[1], r[2]]);
        });
        return dt;
    }

    // Options dynamisch an min/max der jeweils angezeigten Daten anpassen
    function buildOptions(arr) {
        const prices      = arr.map(r => r[1]);
        const minScaled   = Math.floor(Math.min(...prices) * 0.85);
        const maxScaled   = Math.ceil(Math.max(...prices) * 1.15);

        return {
            title: '',
            legend: 'none',
            colors: [boxyfy_preiswecker_chart_args.productPriceAlertMainColor || '#0173ab'],

            hAxis: {
                format: 'dd.MM.yyyy',
                gridlines: { color: 'transparent' },
                textStyle: { fontSize: 10 },
                textPosition: 'none'
            },
            vAxis: {
                viewWindow: { min: minScaled, max: maxScaled },
                gridlines: { count: 3 },
                format: '#,##0 €',
                viewWindowMode: 'explicit'
            },

            chartArea: {
                width: '80%',
                height: '80%',
                left: '10%',
                right: '10%',
                top: 45,
                bottom: 20
            },

            pointSize: 0,
            lineWidth: 1.5,
            fillOpacity: 0.05,
            tooltip: { trigger: 'hover' },
            focusTarget: 'datum',
            curveType: 'function'
        };
    }

    // Zentraler Render‑Helper
    let chart;
    function drawChartFromArray(arr) {
        if (!arr.length) return;

        const data    = buildDataTable(arr);
        const options = buildOptions(arr);

        if (!chart) {
            chart = new google.visualization.AreaChart(
                document.getElementById('preiswecker_chart')
            );
            window.addEventListener('resize', () => chart.draw(data, options));
        }
        chart.draw(data, options);
    }

    /* --------------------------------------------------
     * Chart initialisieren & Buttons verdrahten
     * -------------------------------------------------- */

    function initChart() {
        if (typeof google === 'undefined' ||
            typeof google.visualization === 'undefined') {
            console.error('Google Charts not loaded.');
            return;
        }

        // Originaldaten aus PHP (Array[ [ 'YYYY-MM-DD', price, tooltip ] ])
        const original = boxyfy_preiswecker_chart_args.chartData
            ? JSON.parse(boxyfy_preiswecker_chart_args.chartData)
            : [];

        if (!original.length) {
            console.error('Fehler: keine Chart‑Daten vorhanden.');
            return;
        }

        // Erstes Rendering (volle Historie)
        drawChartFromArray(original);

                // Range‑Buttons (30 Tage / 2 Monate / gesamte Historie)
        document.querySelectorAll('.preiswecker-range-btn').forEach(btn => {
            btn.addEventListener('click', function () {
                const range = this.dataset.range;        // "30", "60" oder "all"
                let filtered;

                if (range === 'all') {
                    filtered = original;                 // komplette Historie zeigen
                } else {
                    const days   = parseInt(range, 10);
                    const cutoff = new Date();
                    cutoff.setDate(cutoff.getDate() - days);

                    filtered = original.filter(r => new Date(r[0]) >= cutoff);
                }

                // Chart neu zeichnen (fällt auf original zurück, falls leer)
                drawChartFromArray(filtered.length ? filtered : original);

                // aktive Button‑Optik aktualisieren
                document.querySelectorAll('.preiswecker-range-btn')
                      .forEach(b => b.classList.toggle('active', b === this));
            });
        });

    }

    // Google Charts Load‑Callback
    if (typeof google !== 'undefined' && typeof google.charts !== 'undefined') {
        google.charts.setOnLoadCallback(initChart);
    }

    /* --------------------------------------------------
     * jQuery‑Teil: Accordion & Formular‑Submit
     * -------------------------------------------------- */
    $(function () {
        $('#preiswecker_toggle_button').on('click', function () {
            $('#preiswecker_form_container').slideToggle();
        });
        $('.preiswecker-save-button').on('click', function () {
            $(this).closest('form').submit();
        });
    });
})(jQuery);