document.addEventListener('DOMContentLoaded', function() {
    const dataTable = document.getElementById('data-table'); // veri_giris.php
    const monthlySummaryCards = document.getElementById('monthly-summary-cards'); // dashboard.php

    // veri_giris.php özelindeki mantık
    if (dataTable) {
        const statusDiv = document.getElementById('save-status');
        const urlParams = new URLSearchParams(window.location.search);
        const currentYear = urlParams.get('yil') || new Date().getFullYear();
        const currentMonth = urlParams.get('ay') || (new Date().getMonth() + 1).toString().padStart(2, '0');
        let iseGidilmediId = null;

        function calculateTotals() {
            console.log('--- calculateTotals started ---');
            const grandTotal = { guzergah: {}, genel: 0 };
            const rows = dataTable.querySelectorAll('tbody tr');
            rows.forEach(row => {
                let dailyTotal = 0;
                const dailyCosts = row.querySelectorAll('.daily-cost:not([disabled])');
                dailyCosts.forEach(input => {
                    const cost = parseFloat(input.value) || 0;
                    dailyTotal += cost;
                    const guzergahId = input.dataset.guzergahId;
                    if (!grandTotal.guzergah[guzergahId]) grandTotal.guzergah[guzergahId] = 0;
                    grandTotal.guzergah[guzergahId] += cost;
                });
                const dailyTotalInput = row.querySelector('.daily-total');
                if(dailyTotalInput) {
                    dailyTotalInput.value = dailyTotal > 0 ? dailyTotal.toFixed(2).replace('.', ',') + ' TL' : '';
                    console.log(`Daily total for ${row.id}: ${dailyTotalInput.value}`);
                }
                grandTotal.genel += dailyTotal;
            });

            for (const id in grandTotal.guzergah) {
                const footerCell = document.getElementById(`total-col-${id}`);
                if (footerCell) {
                    const value = grandTotal.guzergah[id].toFixed(2).replace('.', ',') + ' TL';
                    footerCell.textContent = value;
                    console.log(`Updated footer cell total-col-${id} to:`, footerCell.textContent);
                } else {
                    console.warn(`Footer cell with ID total-col-${id} not found when updating totals.`);
                }
            }
            
            const grandTotalCell = document.getElementById('grand-total');
            if (grandTotalCell) {
                const value = grandTotal.genel.toFixed(2).replace('.', ',') + ' TL';
                grandTotalCell.textContent = value;
                console.log("Updated grandTotalCell to:", grandTotalCell.textContent);
            } else {
                console.error("Element with ID 'grand-total' not found when updating totals!");
            }
            console.log('--- calculateTotals finished ---');
        }

        async function saveEntry(element) {
            // Disabled bir izin kutucuğu bile olsa, işaret kaldırıldığında kaydetmeye izin ver (örn: satır komple izinli hale gelmişse)
            if (!element || (element.disabled && !element.classList.contains('izin-check'))) return;
            
            statusDiv.textContent = 'Kaydediliyor...';
            statusDiv.classList.add('text-primary');
            statusDiv.classList.remove('text-success', 'text-danger');

            const date = element.dataset.date;
            let payload = {};

            if (element.classList.contains('izin-check')) {
                const isChecked = element.checked;
                const row = element.closest('tr');
                row.classList.toggle('personal-leave-row', isChecked);
                row.querySelectorAll('.daily-cost, .status-description').forEach(input => {
                    input.disabled = isChecked;
                    if(isChecked) input.value = ''; // İzinliyse diğer alanları temizle
                });
                
                payload = {
                    tarih: date,
                    guzergah_id: iseGidilmediId,
                    ucret: 0,
                    aciklama: isChecked ? 'İzinli' : '' // İşaret kaldırılınca kaydı siler
                };
            } else if (element.classList.contains('daily-cost')) {
                payload = {
                    tarih: date,
                    guzergah_id: element.dataset.guzergahId,
                    ucret: element.value === '' ? null : (parseFloat(element.value) || 0) // Hücre boşsa null gönder
                };
            } else if (element.classList.contains('status-description')) {
                 payload = {
                    tarih: date,
                    guzergah_id: iseGidilmediId,
                    ucret: 0,
                    aciklama: element.value
                };
            } else {
                 statusDiv.textContent = '';
                 return; // Kaydedilecek bir şey yok
            }

            try {
                const response = await fetch('api_save_entry.php', {
                    method: 'POST',
                    headers: {'Content-Type': 'application/json'},
                    body: JSON.stringify(payload)
                });
                const result = await response.json();
                if (result.success) {
                    statusDiv.textContent = 'Kaydedildi ✓';
                    statusDiv.classList.remove('text-primary', 'text-danger');
                    statusDiv.classList.add('text-success');
                } else {
                    throw new Error(result.message);
                }
            } catch (error) {
                console.error('Kaydetme hatası:', error);
                statusDiv.textContent = 'Hata! Kaydedilemedi.';
                statusDiv.classList.remove('text-primary', 'text-success');
                statusDiv.classList.add('text-danger');
            }
            calculateTotals();
        }

        async function initializeVeriGirisPage() {
            console.log('Initializing veri_giris page...');
            try {
                const guzergahResponse = await fetch('api_get_guzergahlar.php');
                const guzergahlar = await guzergahResponse.json();

                // Daha esnek arama: trim, toLowerCase, normalize
                const iseGidilmediGuzergah = guzergahlar.find(g => {
                    const name = g.guzergah_adi.trim().toLowerCase().normalize('NFC');
                    return name === 'işe gidilmedi' ||
                           name.includes('gidilmedi') ||
                           name === 'ise gidilmedi' ||
                           g.guzergah_adi === 'İşe Gidilmedi';
                });

                if (iseGidilmediGuzergah) {
                    iseGidilmediId = iseGidilmediGuzergah.id;
                    console.log('✓ "İşe Gidilmedi" güzergahı bulundu. ID:', iseGidilmediId);
                } else {
                    console.error('"İşe Gidilmedi" güzergahı bulunamadı. Mevcut güzergahlar:', guzergahlar);
                    console.error('Lütfen debug_guzergahlar.php dosyasını açın ve sorunu kontrol edin.');
                    return;
                }
            } catch (error) {
                console.error('Sayfa başlatılırken hata oluştu: ' + error.message);
                return;
            }

            try {
                const response = await fetch(`api_get_month_data.php?yil=${currentYear}&ay=${currentMonth}`);
                const data = await response.json();
                console.log('API returned data:', data);
                if (data.error) throw new Error(data.error);

                data.forEach(item => {
                    console.log('Processing item:', item);
                    const date = item.tarih;
                    const row = document.querySelector(`input[data-date="${date}"]`)?.closest('tr');
                    if (!row) return;

                    if (item.guzergah_id == iseGidilmediId) {
                        const statusInput = row.querySelector('.status-description');
                        // Durum açıklamasını her zaman yükle (disabled olsa bile)
                        if (statusInput) statusInput.value = item.aciklama;

                        // ESNEK İZİNLİ KONTROLÜ: Encoding sorunlarına karşı dayanıklı
                        const aciklamaLower = (item.aciklama || '').toLowerCase().trim();
                        const isIzinli = aciklamaLower === 'izinli' ||
                                        aciklamaLower === 'İzinli' ||
                                        aciklamaLower.includes('zinli') || // ?zinli, ızinli vb.
                                        item.aciklama === 'İzinli';

                        if (isIzinli) {
                            const izinCheck = row.querySelector('.izin-check');
                            // İzinli checkbox'ını her zaman işaretle (disabled olsa bile)
                            if(izinCheck) {
                                console.log(`✓ İzinli işaretleniyor: ${date}, Açıklama: "${item.aciklama}", Disabled: ${izinCheck.disabled}`);
                                izinCheck.checked = true;
                                row.classList.add('personal-leave-row');
                                // Sadece disabled olmayan inputları disable et
                                row.querySelectorAll('.daily-cost:not([disabled]), .status-description:not([disabled])').forEach(input => input.disabled = true);
                            } else {
                                console.warn(`⚠ İzinli checkbox bulunamadı: ${date}`);
                            }
                        }
                    } else {
                        const input = row.querySelector(`.daily-cost[data-guzergah-id="${item.guzergah_id}"]`);
                        if (input && !input.disabled) input.value = (parseFloat(item.ucret) || 0).toFixed(2);
                    }
                });

                calculateTotals();
            } catch (error) {
                console.error('Veri yüklenirken hata:', error);
            }
        }

        dataTable.addEventListener('focusout', e => { if (e.target.matches('.daily-cost, .status-description')) saveEntry(e.target); });
        dataTable.addEventListener('change', e => { if (e.target.matches('.izin-check')) saveEntry(e.target); });
        dataTable.addEventListener('input', e => { if (e.target.matches('.daily-cost')) calculateTotals(); });
        initializeVeriGirisPage();

        // Ay ve Yıl filtreleri için otomatik sayfa yükleme
        const aySelect = document.getElementById('ay');
        const yilSelect = document.getElementById('yil');

        function handleFilterChange() {
            const selectedAy = aySelect.value;
            const selectedYil = yilSelect.value;
            window.location.href = `veri_giris.php?ay=${selectedAy}&yil=${selectedYil}`;
        }

        if (aySelect && yilSelect) {
            aySelect.addEventListener('change', handleFilterChange);
            yilSelect.addEventListener('change', handleFilterChange);
        }

    } else if (monthlySummaryCards) { // dashboard.php özelindeki mantık
        const statusDiv = document.createElement('div');
        statusDiv.id = 'dashboard-status';
        statusDiv.className = 'text-muted fw-bold mb-3 text-center';
        monthlySummaryCards.parentNode.insertBefore(statusDiv, monthlySummaryCards);

        monthlySummaryCards.addEventListener('change', async function(e) {
            if (e.target.classList.contains('odendi-check')) {
                const checkbox = e.target;
                const yil = checkbox.dataset.year;
                const ay = checkbox.dataset.month;
                const odendi = checkbox.checked;
                const card = checkbox.closest('.card');

                statusDiv.textContent = 'Güncelleniyor...';
                statusDiv.classList.remove('text-success', 'text-danger');
                statusDiv.classList.add('text-primary');

                try {
                    const response = await fetch('api_set_paid_status.php', {
                        method: 'POST',
                        headers: {'Content-Type': 'application/json'},
                        body: JSON.stringify({ yil, ay, odendi })
                    });
                    const result = await response.json();

                    if (result.success) {
                        statusDiv.textContent = 'Durum güncellendi ✓';
                        statusDiv.classList.remove('text-primary', 'text-danger');
                        statusDiv.classList.add('text-success');

                        card.classList.toggle('border-success', odendi);
                        card.classList.toggle('border-warning', !odendi);
                        card.classList.toggle('bg-success-subtle', odendi);
                        card.querySelector('span.badge').innerHTML = odendi ? 'Ödendi' : 'Bekliyor';
                        card.querySelector('span.badge').classList.toggle('bg-success', odendi);
                        card.querySelector('span.badge').classList.toggle('bg-warning', !odendi);
                        
                        // Ödeme tarihi güncelle
                        let odemeTarihiElement = card.querySelector('small.text-muted');
                        if (odendi && result.odeme_tarihi) {
                            if (!odemeTarihiElement) {
                                odemeTarihiElement = document.createElement('small');
                                odemeTarihiElement.className = 'text-muted text-end mt-2';
                                card.querySelector('.card-body').appendChild(odemeTarihiElement);
                            }
                            // API'den dönen odeme_tarihi değerini kullanarak tarihi formatla
                            const apiDate = new Date(result.odeme_tarihi);
                            const formattedDate = apiDate.toLocaleDateString('tr-TR', { day: '2-digit', month: '2-digit', year: 'numeric' });
                            odemeTarihiElement.textContent = `Ödeme Tarihi: ${formattedDate}`;
                        } else if (!odendi && odemeTarihiElement) {
                            odemeTarihiElement.remove(); // Ödenmediyse tarihi kaldır
                        }


                    } else {
                        throw new Error(result.message);
                    }
                } catch (error) {
                    console.error('Ödeme durumu güncellenirken hata:', error);
                    statusDiv.textContent = 'Hata! Güncellenemedi.';
                    statusDiv.classList.remove('text-primary', 'text-danger');
                    statusDiv.classList.add('text-danger');
                    checkbox.checked = !odendi; // Checkbox'ı eski haline getir
                }
            }
        });
    }
});