<?php
/**
 * Abonelik ve Lojistik Planlama Motoru
 * Konum: /includes/subscription_helper.php
 */

/**
 * Yeni bir abonelik için teslimat takvimini otomatik oluşturur.
 * * @param PDO $db Veritabanı bağlantısı
 * @param int $subscription_id Oluşturulan aboneliğin ID'si
 * @return bool İşlem sonucu
 */
function createSubscriptionSchedule($db, $subscription_id) {
    try {
        // 1. Abonelik ve Ürün bilgilerini çek (Kaç teslimat yapılacak?)
        $stmt = $db->prepare("
            SELECT s.start_date, p.total_deliveries 
            FROM subscriptions s 
            JOIN products p ON s.product_id = p.id 
            WHERE s.id = ?
        ");
        $stmt->execute([$subscription_id]);
        $sub = $stmt->fetch();

        if (!$sub) return false;

        $startDate = new DateTime($sub['start_date']);
        $totalDeliveries = (int)$sub['total_deliveries'];

        // 2. Döngü ile her ay için bir teslimat satırı oluştur
        $insertStmt = $db->prepare("
            INSERT INTO subscription_deliveries (subscription_id, delivery_month, status) 
            VALUES (?, ?, 'pending_shipment')
        ");

        for ($i = 0; $i < $totalDeliveries; $i++) {
            // Başlangıç tarihine her döngüde +1 ay ekle
            // İlk teslimat genellikle satın alınan aydır (i=0)
            $deliveryDate = clone $startDate;
            $deliveryDate->modify("+$i month");
            
            // Veritabanı formatı: YYYY-MM (Örn: 2026-03)
            $monthString = $deliveryDate->format('Y-m');

            // Takvime ekle
            $insertStmt->execute([$subscription_id, $monthString]);
        }

        return true;

    } catch (Exception $e) {
        // Hata durumunda loglanabilir
        return false;
    }
}

/**
 * Mevcut bir teslimatın durumunu günceller.
 */
function updateDeliveryStatus($db, $delivery_id, $status, $tracking_code = NULL) {
    $sql = "UPDATE subscription_deliveries SET status = ?, tracking_code = ? WHERE id = ?";
    return $db->prepare($sql)->execute([$status, $tracking_code, $delivery_id]);
}