<?php
/**
 * Admin Tekli Deneme Toplu Yükleme (CSV/Excel) - Akıllı Marka Tanıma Sistemi
 * Konum: /magaza/admin/deneme/excel_yukle.php
 */

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

/**
 * GÜVENLİK KONTROLÜ
 */
adminCheck();

// --- ÖRNEK ŞABLON İNDİRME İŞLEMİ ---
if (isset($_GET['islem']) && $_GET['islem'] == 'ornek_indir') {
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=ornek_deneme_sablonu.csv');
    
    // Excel'de Türkçe karakterlerin düzgün görünmesi için BOM ekliyoruz
    echo "\xEF\xBB\xBF";
    
    $output = fopen('php://output', 'w');
    // Başlıklar Güncellendi: Marka ID yerine Marka Adı
    fputcsv($output, ['Deneme Adi', 'SKU Kodu', 'Sinav Turu', 'Marka Adi', 'Yayin Tarihi', 'Uygulanma Tarihi(YYYY-AA-GG)', 'Fiyat', 'Stok'], ';');
    fputcsv($output, ['2026 Türkiye Geneli TYT Denemesi', 'TYT-01', 'TYT', 'LİMİT', 'Mart 2026', '2026-05-15', '150.00', '500'], ';');
    fputcsv($output, ['2026 Türkiye Geneli AYT Denemesi', 'AYT-02', 'AYT', 'YENİ YAYIN', 'Nisan 2026', '12.04.2026', '160.00', '300'], ';');
    fclose($output);
    exit;
}

$mesaj = '';

// Form yüklendiğinde (Dosya gönderildiğinde)
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['csv_dosyasi'])) {
    
    $dosya = $_FILES['csv_dosyasi'];
    
    if ($dosya['error'] === UPLOAD_ERR_OK) {
        $ext = strtolower(pathinfo($dosya['name'], PATHINFO_EXTENSION));
        
        // Sadece .csv veya .txt uzantısına izin ver
        if ($ext === 'csv' || $ext === 'txt') {
            
            // 1. DOSYAYI TAMAMEN OKU
            $icerik = file_get_contents($dosya['tmp_name']);
            
            // 2. BOM (Byte Order Mark) TEMİZLİĞİ
            $icerik = preg_replace('/^\xEF\xBB\xBF/', '', $icerik);
            
            // 3. TÜRKÇE KARAKTER DÜZELTME MOTORU
            $enc = mb_detect_encoding($icerik, 'UTF-8, ISO-8859-9, Windows-1254', true);
            if ($enc !== 'UTF-8') {
                $icerik = mb_convert_encoding($icerik, 'UTF-8', 'ISO-8859-9, Windows-1254');
            } else {
                $icerik = mb_convert_encoding($icerik, 'UTF-8', 'UTF-8'); 
            }
            
            // 4. SATIRLARI BÖL
            $icerik = str_replace(array("\r\n", "\r"), "\n", $icerik);
            $satirlar = explode("\n", $icerik);
            
            if (count($satirlar) > 0) {
                $ilk_satir = $satirlar[0];
                $delimiter = (strpos($ilk_satir, "\t") !== false) ? "\t" : ";";
                
                $basarili = 0;
                $hatali = 0;
                $satir_no = 0;
                
                $db->beginTransaction();
                
                try {
                    $stmt = $db->prepare("INSERT INTO products 
                        (type, name, slug, sku, exam_type, brand_id, exam_publication_date, exam_date, price, stock_quantity, status, publish_date) 
                        VALUES ('single_exam', ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, NOW())");

                    foreach ($satirlar as $satir_verisi) {
                        $satir_no++;
                        
                        if (empty(trim($satir_verisi))) continue;
                        if ($satir_no == 1) continue; // Başlığı atla
                        
                        $data = str_getcsv($satir_verisi, $delimiter);
                        
                        $name = isset($data[0]) ? trim($data[0]) : '';
                        $sku = isset($data[1]) ? trim($data[1]) : '';
                        $exam_type = isset($data[2]) ? trim($data[2]) : '';
                        
                        // --- AKILLI MARKA YAKALAMA SİSTEMİ ---
                        $brand_name = isset($data[3]) ? trim($data[3]) : '';
                        $brand_id = NULL;
                        
                        if (!empty($brand_name)) {
                            // Veritabanında bu isimde marka var mı kontrol et (Büyük/küçük harf duyarsız)
                            $brand_check = $db->prepare("SELECT id FROM brands WHERE name LIKE ? LIMIT 1");
                            $brand_check->execute([$brand_name]);
                            $existing_brand_id = $brand_check->fetchColumn();
                            
                            if ($existing_brand_id) {
                                // Marka bulundu, ID'sini al
                                $brand_id = $existing_brand_id;
                            } else {
                                // Marka yok, yeni oluştur!
                                $brand_slug = seoLink($brand_name);
                                
                                // Slug çakışması ihtimaline karşı benzersizleştir
                                $slug_check = $db->prepare("SELECT id FROM brands WHERE slug = ?");
                                $slug_check->execute([$brand_slug]);
                                if($slug_check->rowCount() > 0) {
                                    $brand_slug = $brand_slug . '-' . time();
                                }
                                
                                $insert_brand = $db->prepare("INSERT INTO brands (name, slug, status) VALUES (?, ?, 1)");
                                $insert_brand->execute([$brand_name, $brand_slug]);
                                $brand_id = $db->lastInsertId();
                            }
                        }
                        // -------------------------------------

                        $exam_publication_date = isset($data[4]) ? trim($data[4]) : '';
                        
                        // TARİH FORMATI DÜZELTME
                        $exam_date = (isset($data[5]) && trim($data[5]) != '') ? trim($data[5]) : NULL;
                        if ($exam_date && strpos($exam_date, '.') !== false) {
                            $date_parts = explode('.', $exam_date);
                            if (count($date_parts) == 3) {
                                $exam_date = $date_parts[2] . '-' . $date_parts[1] . '-' . $date_parts[0];
                            }
                        }
                        
                        $price = isset($data[6]) ? (float)str_replace(',', '.', $data[6]) : 0;
                        $stock_quantity = isset($data[7]) ? (int)$data[7] : 0;

                        // Zorunlu alanlar dolu mu?
                        if (!empty($name) && !empty($exam_type) && $price > 0) {
                            
                            // Benzersiz Slug Oluştur
                            $slug = seoLink($name);
                            $check = $db->prepare("SELECT id FROM products WHERE slug = ?");
                            $check->execute([$slug]);
                            if ($check->rowCount() > 0) { 
                                $slug = $slug . '-' . time() . '-' . $satir_no; 
                            }
                            
                            $stmt->execute([
                                $name, $slug, $sku, $exam_type, $brand_id, $exam_publication_date, $exam_date, $price, $stock_quantity
                            ]);
                            $basarili++;
                            
                        } else {
                            $hatali++;
                        }
                    }
                    
                    $db->commit();
                    
                    $mesaj = "<div class='alert alert-success shadow-sm'>
                                <i class='bi bi-check-circle-fill me-2'></i>Yükleme Tamamlandı! <br>
                                <strong>$basarili</strong> adet deneme başarıyla eklendi. <br>
                                <strong>$hatali</strong> adet satır hatalı/eksik olduğu için atlandı.
                              </div>";
                              
                } catch (Exception $e) {
                    $db->rollBack();
                    $mesaj = "<div class='alert alert-danger shadow-sm'><i class='bi bi-x-circle-fill me-2'></i>Veritabanı Hatası: " . $e->getMessage() . "</div>";
                }
            } else {
                $mesaj = "<div class='alert alert-danger shadow-sm'>Dosya içi boş okunamadı.</div>";
            }
        } else {
            $mesaj = "<div class='alert alert-warning shadow-sm'>Lütfen sadece <b>.csv</b> uzantılı dosya yükleyin.</div>";
        }
    } else {
        $mesaj = "<div class='alert alert-danger shadow-sm'>Dosya yüklenirken bir hata oluştu.</div>";
    }
}

require_once '../header.php';
?>

<div class="row mb-4 align-items-center">
    <div class="col-6">
        <h2 class="fw-bold mb-0 text-dark"><i class="bi bi-file-earmark-excel text-success me-2"></i>Excel ile Toplu Yükleme</h2>
    </div>
    <div class="col-6 text-end">
        <a href="index.php" class="btn btn-outline-secondary shadow-sm fw-bold"><i class="bi bi-arrow-left me-1"></i> İptal / Geri Dön</a>
    </div>
</div>

<?= $mesaj; ?>

<div class="row">
    <div class="col-md-8">
        <div class="card shadow-sm border-0 mb-4 border-start border-4 border-success">
            <div class="card-header bg-dark text-white py-3">
                <h5 class="card-title mb-0 fw-bold small text-uppercase"><i class="bi bi-cloud-arrow-up me-2"></i>CSV Dosyası Yükle</h5>
            </div>
            <div class="card-body p-5 text-center">
                <i class="bi bi-filetype-csv text-success" style="font-size: 4rem;"></i>
                <h4 class="mt-3 fw-bold text-dark">Toplu Deneme Havuzu Yüklemesi</h4>
                <p class="text-muted mb-4">Hazırladığınız Excel tablosunu farklı kaydet diyerek <b>.csv</b> formatında indirin ve aşağıdaki alandan yükleyin.</p>
                
                <form action="excel_yukle.php" method="POST" enctype="multipart/form-data" class="d-inline-block w-100" style="max-width: 400px;">
                    <input type="file" name="csv_dosyasi" class="form-control form-control-lg border-2 mb-3" accept=".csv, .txt" required>
                    <button type="submit" class="btn btn-success btn-lg w-100 fw-bold shadow">
                        <i class="bi bi-upload me-2"></i>DOSYAYI YÜKLE VE İŞLE
                    </button>
                </form>
            </div>
        </div>
        
        <div class="alert alert-info shadow-sm border-0">
            <h6 class="fw-bold"><i class="bi bi-info-circle-fill me-2"></i>Nasıl Kullanılır?</h6>
            <ol class="mb-0">
                <li>Sağ taraftaki butondan <b>Örnek Şablonu</b> indirin.</li>
                <li>Dosyayı Excel ile açın. İlk satırdaki başlıkları <b>kesinlikle silmeyin.</b></li>
                <li><b>Marka Adı:</b> İstediğiniz yayın evinin adını direkt yazabilirsiniz. Sistemde yoksa otomatik eklenecektir.</li>
                <li>Tarihleri <b>14.09.2025</b> veya <b>2025-09-14</b> şeklinde girebilirsiniz (Sistem otomatik dönüştürür).</li>
                <li>Excel'de <b>Dosya > Farklı Kaydet</b> diyerek formatı <b>"CSV (Virgülle Ayrılmış)"</b> veya <b>"Sekmeyle Ayrılmış Metin"</b> olarak kaydedin.</li>
                <li>Kaydettiğiniz bu dosyayı yukarıdaki alandan yükleyin.</li>
            </ol>
        </div>
    </div>

    <div class="col-md-4">
        
        <div class="card shadow-sm mb-4 border-0 bg-light">
            <div class="card-body p-4 text-center">
                <h6 class="fw-bold text-dark text-uppercase mb-3">Şablon Dosyası</h6>
                <a href="?islem=ornek_indir" class="btn btn-primary w-100 fw-bold shadow-sm">
                    <i class="bi bi-download me-2"></i>Örnek CSV Şablonunu İndir
                </a>
                <small class="text-muted d-block mt-2">Sütun başlıkları ve sıralaması sabittir.</small>
            </div>
        </div>

        <div class="card shadow-sm border-0 border-start border-4 border-info">
            <div class="card-body p-4">
                <h6 class="fw-bold text-dark mb-3"><i class="bi bi-magic text-info me-2"></i>Akıllı Marka Sistemi Devrede</h6>
                <p class="text-muted small mb-0">Artık markaların ID'sini bulmanıza gerek yok. Sütuna marka ismini (Örn: "LİMİT", "BİLGİ SARMAL") yazmanız yeterli. <br><br>Sistem eşleşenleri bulacak, sistemde olmayan yeni bir marka yazdıysanız onu <b>otomatik olarak Markalar listesine ekleyecektir.</b></p>
            </div>
        </div>

    </div>
</div>

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