<?php
// Hataları ekranda görmek isterseniz (Test aşamasında açık kalabilir)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// 1. Veritabanı Bağlantısı (magaza dizinindeki kendi dosyanız)
require_once 'includes/db.php';

// 2. Google Kütüphanesi ve Anahtar (Ana dizinde olduğu için ../ ile bir üst klasöre çıkıyoruz)
// DİKKAT: 'anahtar_dosyaniz.json' kısmını ana dizine attığınız dosyanın TAM adıyla değiştirin.
require_once '../vendor/autoload.php';
$jsonPath = '../sinavkocumagaza-493413-a8380244f576.json'; 
$merchantId = '5766362499'; // Sizin Merchant ID'niz

// 3. Google API Kimlik Doğrulaması
$client = new Google\Client();
$client->setAuthConfig($jsonPath);
$client->addScope('https://www.googleapis.com/auth/content');
$service = new Google\Service\ShoppingContent($client);

// 4. Site Temel URL Tanımlaması
$baseUrl = "https://www.sinavkocu.tr/magaza/";

try {
    // 5. Ürünleri Veritabanından Çek (urun-detay.php'deki mantığın aynısı)
    // Sadece "status = 1" olan (Aktif) ürünleri çekiyoruz.
    $stmt = $db->prepare("
        SELECT p.*, 
               c.name as cat_name, 
               b.name as brand_name,
               COALESCE(
                   (SELECT image_path FROM product_images WHERE product_id = p.id AND is_main = 1 LIMIT 1),
                   (SELECT default_cover FROM brands WHERE id = p.brand_id),
                   'assets/img/no-image.jpg'
               ) as main_image
        FROM products p
        LEFT JOIN categories c ON p.category_id = c.id
        LEFT JOIN brands b ON p.brand_id = b.id
        WHERE p.status = 1
    ");
    $stmt->execute();
    $urunler = $stmt->fetchAll(PDO::FETCH_ASSOC);

    echo "<h2>Google Merchant Center Ürün Gönderimi</h2>";
    echo "Toplam <b>" . count($urunler) . "</b> aktif ürün bulundu. İşlem başlatılıyor...<hr>";

    $basarili = 0;
    $hatali = 0;

    // 6. Ürünleri Döngüye Sok ve Google'a Gönder
    foreach ($urunler as $urun) {
        $product = new Google\Service\ShoppingContent\Product();

        // Benzersiz Kimlik (SKU varsa SKU'yu, yoksa DB ID'sini kullan)
        $offerId = !empty($urun['sku']) ? $urun['sku'] : 'ID-' . $urun['id'];
        $product->setOfferId($offerId);
        
        // Ürün Adı ve Açıklaması
        $product->setTitle(mb_substr($urun['name'], 0, 150)); // Google title sınırı 150 karakterdir
        $aciklama = !empty($urun['description']) ? strip_tags($urun['description']) : $urun['name'];
        $product->setDescription(mb_substr($aciklama, 0, 5000)); // Açıklamayı html etiketlerinden temizledik
        
        // Linkler
        $product->setLink($baseUrl . "urun-detay.php?slug=" . $urun['slug']);
        $product->setImageLink($baseUrl . $urun['main_image']);
        
        // Marka Bilgisi
        $marka = !empty($urun['brand_name']) ? $urun['brand_name'] : 'Sınav Koçu';
        $product->setBrand($marka);

        // Zorunlu Sabit Değerler
        $product->setContentLanguage('tr');
        $product->setTargetCountry('TR');
        $product->setChannel('online');
        $product->setCondition('new'); // Ürünler sıfır (yeni)

        // Stok Durumu Kontrolü (urun-detay.php'deki mantığa göre)
        if ($urun['type'] == 'digital' || $urun['stock_quantity'] > 0) {
            $product->setAvailability('in stock');
        } else {
            $product->setAvailability('out of stock');
        }

        // Fiyat ve İndirimli Fiyat Kontrolü
        // Ürünün indirimli fiyatı varsa, Google'a indirimli fiyatı "salePrice" olarak, normal fiyatı "price" olarak iletmeliyiz.
        $normalFiyat = new Google\Service\ShoppingContent\Price();
        $normalFiyat->setValue(number_format($urun['price'], 2, '.', ''));
        $normalFiyat->setCurrency('TRY');
        $product->setPrice($normalFiyat);

        if ($urun['discount_price'] > 0 && $urun['discount_price'] < $urun['price']) {
            $indirimliFiyat = new Google\Service\ShoppingContent\Price();
            $indirimliFiyat->setValue(number_format($urun['discount_price'], 2, '.', ''));
            $indirimliFiyat->setCurrency('TRY');
            $product->setSalePrice($indirimliFiyat);
        }

        // Kargo Bilgisi (Ücretsiz kargo ise gönder)
        if ($urun['is_free_shipping'] == 1 && $urun['type'] != 'digital') {
            $shipping = new Google\Service\ShoppingContent\ProductShipping();
            $shippingPrice = new Google\Service\ShoppingContent\Price();
            $shippingPrice->setValue('0.00');
            $shippingPrice->setCurrency('TRY');
            $shipping->setPrice($shippingPrice);
            $shipping->setCountry('TR');
            $product->setShipping([$shipping]);
        }

        // Ürünü API ile Gönder
        try {
            $response = $service->products->insert($merchantId, $product);
            echo "<span style='color:green;'>✓ Başarılı:</span> " . $urun['name'] . " (ID: " . $response->getId() . ")<br>";
            $basarili++;
        } catch (Google\Service\Exception $e) {
            // Google'dan dönen özel hataları yakala
            $errorMsg = json_decode($e->getMessage(), true);
            $msg = isset($errorMsg['error']['message']) ? $errorMsg['error']['message'] : $e->getMessage();
            echo "<span style='color:red;'>✗ Hata (".$urun['name']."):</span> " . $msg . "<br>";
            $hatali++;
        }
    }

    echo "<hr><h3>İşlem Tamamlandı!</h3>";
    echo "Başarıyla Gönderilen: <b>$basarili</b> <br>";
    echo "Hata Alınan: <b>$hatali</b>";

} catch (Exception $e) {
    echo "<b>Kritik bir hata oluştu:</b> " . $e->getMessage();
}
?>