<?php
/**
 * Kullanıcı - İptal/İade Talebi Kayıt Motoru
 * Konum: /magaza/kullanici/talep-ilet.php
 */

session_start();
require_once '../includes/db.php';
require_once '../includes/functions.php';

// 1. OTURUM KONTROLÜ
if (!isset($_SESSION['user_id'])) {
    header("Location: ../giris.php");
    exit;
}

$user_id = (int)$_SESSION['user_id'];

// 2. POST VERİLERİNİ AL VE TEMİZLE
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $order_id     = isset($_POST['order_id']) ? (int)$_POST['order_id'] : 0;
    $request_type = isset($_POST['request_type']) ? $_POST['request_type'] : ''; // cancellation veya return
    $reason       = isset($_POST['reason']) ? trim($_POST['reason']) : '';
    $customer_note = isset($_POST['customer_note']) ? trim($_POST['customer_note']) : '';

    // Temel alanların kontrolü
    if ($order_id <= 0 || !in_array($request_type, ['cancellation', 'return']) || empty($reason)) {
        header("Location: siparisler.php");
        exit;
    }

    // 3. GÜVENLİK KONTROLÜ (Sipariş Gerçekten Bu Kullanıcıya mı Ait?)
    $stmt = $db->prepare("SELECT id, status FROM orders WHERE id = ? AND user_id = ?");
    $stmt->execute([$order_id, $user_id]);
    $order = $stmt->fetch();

    if (!$order) {
        // Yetkisiz erişim denemesi
        header("Location: siparisler.php");
        exit;
    }

    // 4. MÜKERRER TALEP KONTROLÜ (Zaten aktif bir talep var mı?)
    $check_request = $db->prepare("SELECT id FROM order_returns WHERE order_id = ? AND status = 'pending'");
    $check_request->execute([$order_id]);
    if ($check_request->rowCount() > 0) {
        // Zaten bekleyen bir talep var, tekrar oluşturma
        header("Location: siparis-detay.php?id=$order_id&error=already_exists");
        exit;
    }

    // 5. DURUM VALIDASYONU (Kargolanmış ürün iptal edilemez vb.)
    if ($request_type == 'cancellation' && !in_array($order['status'], ['pending', 'processing'])) {
        header("Location: siparis-detay.php?id=$order_id&error=invalid_status");
        exit;
    }

    try {
        $db->beginTransaction();

        // 6. TALEBİ KAYDET
        $ins = $db->prepare("
            INSERT INTO order_returns 
            (order_id, user_id, request_type, reason, customer_note, status, created_at) 
            VALUES (?, ?, ?, ?, ?, 'pending', NOW())
        ");
        $ins->execute([$order_id, $user_id, $request_type, $reason, $customer_note]);

        // 7. İPTAL İSTEĞİ İSE SİPARİŞİ KİLİTLE
        // Bu işlem Admin panelinde "Yanıp Sönen Kırmızı Alarm" tetikler.
        if ($request_type == 'cancellation') {
            $db->prepare("UPDATE orders SET is_cancel_requested = 1 WHERE id = ?")->execute([$order_id]);
        }

        $db->commit();
        
        // Başarıyla tamamlandı, detay sayfasına geri gönder (Success mesajı detay sayfasında basılacak)
        header("Location: siparis-detay.php?id=$order_id&success=talep_iletildi");
        exit;

    } catch (Exception $e) {
        $db->rollBack();
        // Hata durumunda loglama yapılabilir veya hata mesajı dönebilir
        header("Location: siparis-detay.php?id=$order_id&error=system_error");
        exit;
    }

} else {
    // Doğrudan URL'den erişim engelle
    header("Location: siparisler.php");
    exit;
}