<?php
/**
 * Admin Deneme Paketi - Depo Toplama Listesi (Miktar Girmeli Akıllı Hafıza, İptal Korumalı & Sayfalamalı)
 * Konum: /magaza/admin/denemepaket/toplama-listesi.php
 */

require_once '../../includes/db.php';
require_once '../../includes/functions.php';

// Güvenlik Kontrolü
adminCheck();

// --- AJAX: TOPLAMA MİKTARINI VERİTABANINA KAYDETME MOTORU ---
if (isset($_POST['ajax_action']) && $_POST['ajax_action'] == 'update_pick') {
    ob_clean();
    header('Content-Type: application/json');
    try {
        $p_id = (int)$_POST['product_id'];
        $d_start = $_POST['date_start'];
        $d_end = $_POST['date_end'];
        $c_qty = (int)$_POST['collected_qty'];

        // Takip tablosu yoksa otomatik oluştur
        $db->query("CREATE TABLE IF NOT EXISTS pick_tracking (
            id INT AUTO_INCREMENT PRIMARY KEY,
            date_start DATE NOT NULL,
            date_end DATE NOT NULL,
            product_id INT NOT NULL,
            collected_qty INT DEFAULT 0,
            UNIQUE KEY unique_pick (date_start, date_end, product_id)
        )");

        // Değeri Ekle veya Güncelle (UPSERT)
        $ins = $db->prepare("INSERT INTO pick_tracking (date_start, date_end, product_id, collected_qty) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE collected_qty = VALUES(collected_qty)");
        $ins->execute([$d_start, $d_end, $p_id, $c_qty]);

        echo json_encode(['status' => 'success']);
    } catch (Exception $e) {
        echo json_encode(['status' => 'error', 'msg' => $e->getMessage()]);
    }
    exit;
}
// ------------------------------------------------------------

// Tarih aralığı
$baslangic_tarihi = isset($_GET['baslangic']) ? $_GET['baslangic'] : date('Y-m-d');
$bitis_tarihi = isset($_GET['bitis']) ? $_GET['bitis'] : date('Y-m-d');

// Sayfalama (Pagination) Ayarları
$limit = 20;
$p = isset($_GET['p']) ? max(1, (int)$_GET['p']) : 1;
$offset = ($p - 1) * $limit;

/**
 * --- ZEKİ TOPLAMA ALGORİTMASI VE SAYFALAMA SORGULARI ---
 */

// Ana UNION SQL (Hem tekli hem paket denemelerini birleştiren temel yapı)
// GÜNCELLEME: Kargolama tarihleri için 'kargo_tarihi' aliası eklendi.
$union_sql = "
    SELECT 
        p.id, p.name, p.sku, p.exam_type, p.exam_publication_date,
        b.name as brand_name,
        oi.quantity as toplam_ihtiyac,
        'package' as source_type,
        od.planned_date as kargo_tarihi
    FROM order_deliveries od
    JOIN orders o ON od.order_id = o.id
    JOIN order_items oi ON (oi.order_id = o.id AND oi.product_id = od.package_id)
    JOIN products p ON od.exam_id = p.id
    LEFT JOIN brands b ON p.brand_id = b.id
    WHERE od.status = 'pending' 
      AND od.planned_date >= ? 
      AND od.planned_date <= ? 
      AND o.status != 'cancelled'
      AND o.is_cancel_requested = 0

    UNION ALL

    SELECT 
        p.id, p.name, p.sku, p.exam_type, p.exam_publication_date,
        b.name as brand_name,
        oi.quantity as toplam_ihtiyac,
        'single' as source_type,
        COALESCE(STR_TO_DATE(NULLIF(p.exam_publication_date, ''), '%e.%m.%Y'), DATE(o.created_at)) as kargo_tarihi
    FROM order_items oi
    JOIN orders o ON oi.order_id = o.id
    JOIN products p ON oi.product_id = p.id
    LEFT JOIN brands b ON p.brand_id = b.id
    WHERE oi.shipping_status = 'pending' 
      AND p.type = 'single_exam'
      AND COALESCE(STR_TO_DATE(NULLIF(p.exam_publication_date, ''), '%e.%m.%Y'), DATE(o.created_at)) >= ? 
      AND COALESCE(STR_TO_DATE(NULLIF(p.exam_publication_date, ''), '%e.%m.%Y'), DATE(o.created_at)) <= ? 
      AND o.status != 'cancelled'
      AND o.is_cancel_requested = 0
";

// Gruplanmış Ana Sorgu Yapısı (Kargo tarihlerinin MIN ve MAX değerleri eklendi)
$base_sql = "
    SELECT 
        id, name, sku, exam_type, exam_publication_date, brand_name, 
        SUM(toplam_ihtiyac) as toplam_ihtiyac,
        SUM(CASE WHEN source_type = 'package' THEN toplam_ihtiyac ELSE 0 END) as paket_ihtiyac,
        SUM(CASE WHEN source_type = 'single' THEN toplam_ihtiyac ELSE 0 END) as tekli_ihtiyac,
        MIN(kargo_tarihi) as min_tarih,
        MAX(kargo_tarihi) as max_tarih
    FROM ($union_sql) as combined_table
    GROUP BY id, name, sku, exam_type, exam_publication_date, brand_name
";

// 1. Toplam Kayıt Sayısını Bul (Sayfalama için)
$count_stmt = $db->prepare("SELECT COUNT(*) FROM ($base_sql) as t");
$count_stmt->execute([$baslangic_tarihi, $bitis_tarihi, $baslangic_tarihi, $bitis_tarihi]);
$total_records = $count_stmt->fetchColumn();
$total_pages = ceil($total_records / $limit);

// 2. Sadece Geçerli Sayfanın (20 Adet) Verisini Çek
$data_sql = $base_sql . " ORDER BY brand_name ASC, name ASC LIMIT $limit OFFSET $offset";
$stmt = $db->prepare($data_sql);
$stmt->execute([$baslangic_tarihi, $bitis_tarihi, $baslangic_tarihi, $bitis_tarihi]);
$toplanacak_urunler = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 3. Genel Toplam Kitap İhtiyacını Çek (Tüm sayfalar toplamı)
$sum_stmt = $db->prepare("SELECT SUM(toplam_ihtiyac) FROM ($union_sql) as t");
$sum_stmt->execute([$baslangic_tarihi, $bitis_tarihi, $baslangic_tarihi, $bitis_tarihi]);
$toplam_kitap_sayisi = $sum_stmt->fetchColumn() ?: 0;

// --- ÖNCEDEN TOPLANANLARI HAFIZADAN ÇEK ---
$hafiza = [];
try {
    $track_stmt = $db->prepare("SELECT product_id, collected_qty FROM pick_tracking WHERE date_start = ? AND date_end = ?");
    $track_stmt->execute([$baslangic_tarihi, $bitis_tarihi]);
    $hafiza = $track_stmt->fetchAll(PDO::FETCH_KEY_PAIR);
} catch (PDOException $e) { }

$page_title = "Depo Toplama Listesi";
require_once '../header.php';
?>

<style>
    @media print {
        body * { visibility: hidden; }
        #printableArea, #printableArea * { visibility: visible; }
        #printableArea { position: absolute; left: 0; top: 0; width: 100%; }
        .no-print { display: none !important; }
        .card { border: none !important; box-shadow: none !important; }
        .table th { background-color: #eee !important; color: #000 !important; }
        .qty-input { border: none !important; background: transparent !important; box-shadow: none !important; text-align: center; }
    }
    
    .qty-input { width: 70px; text-align: center; font-weight: bold; font-size: 1.1rem; }
    .row-success { background-color: #d1e7dd !important; transition: background-color 0.3s; }
    .row-warning { background-color: #fff3cd !important; transition: background-color 0.3s; }
    
    /* Input type number oklarını (spinners) her zaman göster */
    input[type=number]::-webkit-inner-spin-button, 
    input[type=number]::-webkit-outer-spin-button { opacity: 1; }
    
    .pagination .page-link { color: #212529; font-weight: bold; border-radius: 5px; margin: 0 3px; border: 1px solid #dee2e6; }
    .pagination .active .page-link { background-color: #212529; border-color: #212529; color: #fff; }
</style>

<div class="row mb-4 align-items-center no-print text-dark">
    <div class="col-md-4">
        <h2 class="fw-bold mb-0">
            <a href="index.php" class="btn btn-sm btn-outline-secondary me-3 shadow-sm border-2"><i class="bi bi-arrow-left"></i> Geri</a>
            <i class="bi bi-clipboard2-check-fill text-warning me-2"></i>Depo Toplama Listesi
        </h2>
        <p class="text-muted small mt-2"><b>Akıllı Hafıza Aktif:</b> Toplanan miktarı girdiğinizde otomatik kaydedilir.</p>
    </div>
    
    <div class="col-md-8 text-md-end d-flex justify-content-md-end align-items-center mt-3 mt-md-0">
        <form action="" method="GET" class="d-flex align-items-center bg-white p-2 rounded shadow-sm border me-3">
            <label class="fw-bold small text-muted me-2 text-nowrap">Tarih Aralığı:</label>
            <input type="date" name="baslangic" id="dateStart" class="form-control form-control-sm fw-bold border-0 bg-light me-2" value="<?= $baslangic_tarihi ?>" title="Başlangıç Tarihi">
            <span class="text-muted small fw-bold me-2">-</span>
            <input type="date" name="bitis" id="dateEnd" class="form-control form-control-sm fw-bold border-0 bg-light me-2" value="<?= $bitis_tarihi ?>" title="Bitiş Tarihi">
            <button type="submit" class="btn btn-sm btn-primary fw-bold"><i class="bi bi-search"></i></button>
        </form>
        <button onclick="window.print()" class="btn btn-dark fw-bold shadow-sm rounded-pill px-4 py-2">
            <i class="bi bi-printer-fill me-2"></i> Çıktı Al
        </button>
    </div>
</div>

<div id="printableArea">
    <div class="card shadow-sm border-0 rounded-4 mb-4">
        <div class="card-header bg-dark text-white py-3 d-flex justify-content-between align-items-center">
            <h5 class="mb-0 fw-bold"><i class="bi bi-cart4 me-2"></i>Toplanacak Yayınlar Raporu</h5>
            <div class="text-end">
                <span class="badge bg-warning text-dark me-2">Toplam <?= $total_records ?> Çeşit Kitap</span>
                <span class="small text-light">Tarih: <?= date('d.m.Y', strtotime($baslangic_tarihi)) ?> - <?= date('d.m.Y', strtotime($bitis_tarihi)) ?></span>
            </div>
        </div>
        <div class="card-body p-0">
            
            <?php if(count($toplanacak_urunler) > 0): ?>
                <div class="alert alert-info border-0 shadow-sm m-4 no-print text-dark small">
                    <i class="bi bi-info-circle-fill me-2"></i> <b>Kullanım İpucu:</b> 
                    "Toplanan" alanına raflardan aldığınız sayıyı girin. İhtiyacın tamamını topladığınızda satır <b>yeşil</b>, eksik topladıysanız <b>sarı</b> renkte kalacaktır.
                </div>

                <div class="table-responsive">
                    <table class="table table-bordered align-middle mb-0 text-dark border-start-0 border-end-0">
                        <thead class="table-light">
                            <tr class="text-uppercase small fw-bold">
                                <th class="text-center border-start-0" style="width: 50px;">#</th>
                                <th style="width: 20%;">Yayınevi</th>
                                <th>Ürün Adı / Varyant</th>
                                <th class="text-center" style="width: 15%;">Güncel İhtiyaç</th>
                                <th class="text-center" style="width: 15%;">Toplanan Miktar</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php 
                            $i = $offset + 1; // Sayfalamaya göre ürün sırası
                            foreach($toplanacak_urunler as $urun): 
                                $toplam_ihtiyac = (int)$urun['toplam_ihtiyac'];
                                $paket_ihtiyac = (int)$urun['paket_ihtiyac'];
                                $tekli_ihtiyac = (int)$urun['tekli_ihtiyac'];
                                $toplanan = isset($hafiza[$urun['id']]) ? (int)$hafiza[$urun['id']] : 0;
                                
                                // Kargo Tarihi Metni Oluşturma
                                $min_tarih = date('d.m.Y', strtotime($urun['min_tarih']));
                                $max_tarih = date('d.m.Y', strtotime($urun['max_tarih']));
                                $kargo_tarihi_metni = ($min_tarih == $max_tarih) ? $min_tarih : $min_tarih . ' - ' . $max_tarih;
                                
                                $satir_class = "";
                                $ek_uyari = "";

                                if ($toplanan >= $toplam_ihtiyac) {
                                    $satir_class = "row-success";
                                    $ek_uyari = "<span class='badge bg-success mt-2 d-block' id='badge_".$urun['id']."'><i class='bi bi-check-all'></i> Eksiksiz Toplandı</span>";
                                } elseif ($toplanan > 0 && $toplanan < $toplam_ihtiyac) {
                                    $satir_class = "row-warning";
                                    $fark = $toplam_ihtiyac - $toplanan;
                                    $ek_uyari = "<span class='badge bg-danger mt-2 d-block text-wrap' id='badge_".$urun['id']."'><i class='bi bi-exclamation-triangle'></i> Eksik! $fark adet daha lazım.</span>";
                                } else {
                                    $ek_uyari = "<span class='badge bg-secondary mt-2 d-block text-wrap d-none' id='badge_".$urun['id']."'>Bekliyor</span>";
                                }
                            ?>
                            <tr class="<?= $satir_class ?>" id="row_<?= $urun['id'] ?>">
                                <td class="text-center fw-bold text-muted border-start-0"><?= $i++ ?></td>
                                <td class="fw-bold text-uppercase"><?= htmlspecialchars($urun['brand_name'] ?? 'Genel') ?></td>
                                <td>
                                    <div class="fw-bold text-primary fs-6"><?= htmlspecialchars($urun['name']) ?></div>
                                    <div class="small text-muted mb-2">
                                        SKU: <?= htmlspecialchars($urun['sku'] ?: '-') ?> | 
                                        Tür: <?= $urun['exam_type'] ?> | 
                                        Yayın Tarihi: <span class="fw-bold text-dark"><?= htmlspecialchars($urun['exam_publication_date'] ?: 'Belirtilmemiş') ?></span><br>
                                        Kargolama Tarihi: <span class="fw-bold text-danger"><i class="bi bi-truck"></i> <?= $kargo_tarihi_metni ?></span>
                                    </div>
                                    <div class="d-flex gap-2">
                                        <?php if($paket_ihtiyac > 0): ?>
                                            <span class="badge bg-secondary border"><i class="bi bi-box-seam me-1"></i>Paket İçin: <?= $paket_ihtiyac ?></span>
                                        <?php endif; ?>
                                        <?php if($tekli_ihtiyac > 0): ?>
                                            <span class="badge bg-info text-dark border"><i class="bi bi-book me-1"></i>Tekli Satış: <?= $tekli_ihtiyac ?></span>
                                        <?php endif; ?>
                                    </div>
                                    <div id="uyari_alani_<?= $urun['id'] ?>"><?= $ek_uyari ?></div>
                                </td>
                                <td class="text-center fw-bold fs-3 text-dark">
                                    <?= $toplam_ihtiyac ?>
                                </td>
                                <td class="text-center border-end-0">
                                    <div class="d-flex justify-content-center align-items-center">
                                        <input 
                                            class="form-control form-control-lg border-2 border-secondary qty-input pick-qty" 
                                            type="number" 
                                            min="0" 
                                            data-id="<?= $urun['id'] ?>" 
                                            data-target="<?= $toplam_ihtiyac ?>" 
                                            value="<?= $toplanan ?>">
                                    </div>
                                </td>
                            </tr>
                            <?php endforeach; ?>
                        </tbody>
                        <tfoot class="table-dark">
                            <tr>
                                <td colspan="3" class="text-end fw-bold py-3 border-start-0">TÜM SAYFALAR TOPLAM KİTAP İHTİYACI:</td>
                                <td class="text-center fw-bold fs-3 py-2 text-warning"><?= $toplam_kitap_sayisi ?></td>
                                <td class="no-print border-end-0"></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <?php if($total_pages > 1): ?>
                    <div class="d-flex justify-content-center p-3 bg-light border-top no-print">
                        <nav>
                            <ul class="pagination pagination-sm m-0">
                                <?php for($x = 1; $x <= $total_pages; $x++): ?>
                                    <li class="page-item <?= ($x == $p) ? 'active' : '' ?>">
                                        <a class="page-link shadow-sm" href="?baslangic=<?= $baslangic_tarihi ?>&bitis=<?= $bitis_tarihi ?>&p=<?= $x ?>"><?= $x ?></a>
                                    </li>
                                <?php endfor; ?>
                            </ul>
                        </nav>
                    </div>
                <?php endif; ?>

            <?php else: ?>
                <div class="text-center py-5 text-muted m-4">
                    <i class="bi bi-check2-circle fs-1 d-block mb-3 text-success"></i>
                    <h4 class="fw-bold">Toplanacak Ürün Bulunmuyor</h4>
                    <p>Seçilen tarihler (<?= date('d.m.Y', strtotime($baslangic_tarihi)) ?> - <?= date('d.m.Y', strtotime($bitis_tarihi)) ?>) arasında hazırlanacak kargo görünmüyor.</p>
                </div>
            <?php endif; ?>
            
            <div class="mt-4 p-4 d-none d-print-block border-top">
                <div class="row">
                    <div class="col-4 text-center">
                        <p class="small text-muted mb-4">LİSTEYİ HAZIRLAYAN</p>
                        <p class="fw-bold border-bottom d-inline-block px-5">................................</p>
                    </div>
                    <div class="col-4 text-center">
                        <p class="small text-muted mb-4">DEPO ÇIKIŞ ONAYI</p>
                        <p class="fw-bold border-bottom d-inline-block px-5">................................</p>
                    </div>
                    <div class="col-4 text-center">
                        <p class="small text-muted mb-4">KONTROL / PAKETLEME</p>
                        <p class="fw-bold border-bottom d-inline-block px-5">................................</p>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const qtyInputs = document.querySelectorAll('.pick-qty');
    const dateStart = document.getElementById('dateStart').value;
    const dateEnd = document.getElementById('dateEnd').value;

    qtyInputs.forEach(function(input) {
        
        // Sadece yazmayı bıraktığında (veya oklarla değiştirdiğinde) kaydet (Debounce mantığı için change/blur uygundur)
        input.addEventListener('change', function() {
            
            let collectedQty = parseInt(this.value) || 0;
            const productId = this.getAttribute('data-id');
            const targetQty = parseInt(this.getAttribute('data-target'));
            const row = document.getElementById('row_' + productId);
            const uyariAlani = document.getElementById('uyari_alani_' + productId);
            
            // Negatif girişleri engelle
            if(collectedQty < 0) {
                collectedQty = 0;
                this.value = 0;
            }

            // Satır Rengini ve Uyarıyı Anlık Değiştir
            if (collectedQty >= targetQty) {
                row.classList.remove('row-warning');
                row.classList.add('row-success');
                uyariAlani.innerHTML = "<span class='badge bg-success mt-2 d-block'><i class='bi bi-check-all'></i> Eksiksiz Toplandı</span>";
            } else if (collectedQty > 0 && collectedQty < targetQty) {
                row.classList.remove('row-success');
                row.classList.add('row-warning');
                let fark = targetQty - collectedQty;
                uyariAlani.innerHTML = "<span class='badge bg-danger mt-2 d-block text-wrap'><i class='bi bi-exclamation-triangle'></i> Eksik! " + fark + " adet daha lazım.</span>";
            } else {
                row.classList.remove('row-success');
                row.classList.remove('row-warning');
                uyariAlani.innerHTML = "";
            }

            // AJAX İle Arka Plana Gönder
            let formData = new FormData();
            formData.append('ajax_action', 'update_pick');
            formData.append('product_id', productId);
            formData.append('date_start', dateStart);
            formData.append('date_end', dateEnd);
            formData.append('collected_qty', collectedQty);

            fetch('toplama-listesi.php', {
                method: 'POST',
                body: formData
            })
            .then(res => res.json())
            .then(data => {
                if (data.status !== 'success') {
                    alert('Kaydetme hatası: ' + data.msg);
                }
            })
            .catch(err => {
                console.error(err);
                alert('Bağlantı hatası oluştu, veriniz kaydedilemedi!');
            });
        });
    });
});
</script>

<?php require_once '../footer.php'; ?>