<?php
/**
 * Admin - İptal Talepleri Yönetimi (Kargo Öncesi)
 * Konum: /magaza/admin/siparisler/iptaller.php
 */

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

// Güvenlik Kontrolü
adminCheck();

$mesaj = '';

// Eğer bir önceki işlemden gelen geçici bir mesaj varsa onu al ve sil (PRG Pattern)
if (isset($_SESSION['alert_message'])) {
    $mesaj = $_SESSION['alert_message'];
    unset($_SESSION['alert_message']);
}

/**
 * --- İŞLEM 1: İPTAL TALEBİNİ ONAYLA ---
 */
if (isset($_POST['approve_cancellation'])) {
    $request_id = (int)$_POST['request_id'];
    $order_id = (int)$_POST['order_id'];
    $admin_note = trim($_POST['admin_note']);

    try {
        $db->beginTransaction();

        // 1. Talebi Onayla
        $db->prepare("UPDATE order_returns SET status = 'approved', admin_note = ?, updated_at = NOW() WHERE id = ?")
           ->execute([$admin_note, $request_id]);

        // 2. Siparişi İptal Et ve Kilidi Kaldır
        $db->prepare("UPDATE orders SET status = 'cancelled', is_cancel_requested = 0 WHERE id = ?")
           ->execute([$order_id]);

        // 3. STOKLARI GERİ YÜKLE (Zeki Algoritma)
        $items_stmt = $db->prepare("SELECT oi.product_id, oi.quantity, p.type FROM order_items oi JOIN products p ON oi.product_id = p.id WHERE oi.order_id = ?");
        $items_stmt->execute([$order_id]);
        $order_items = $items_stmt->fetchAll();

        foreach ($order_items as $item) {
            // Fiziksel veya Tekli Denemeyse direkt stoğu artır
            if ($item['type'] == 'physical' || $item['type'] == 'single_exam') {
                $db->prepare("UPDATE products SET stock_quantity = stock_quantity + ? WHERE id = ?")
                   ->execute([$item['quantity'], $item['product_id']]);
            } 
            // Deneme Paketi ise içindeki kutuları açıp alt ürünlerin stoğunu artır
            elseif ($item['type'] == 'exam_package') {
                $pkg_items = $db->prepare("SELECT exam_product_id FROM package_items WHERE package_product_id = ?");
                $pkg_items->execute([$item['product_id']]);
                foreach ($pkg_items->fetchAll() as $p_item) {
                    $db->prepare("UPDATE products SET stock_quantity = stock_quantity + ? WHERE id = ?")
                       ->execute([$item['quantity'], $p_item['exam_product_id']]);
                }
            }
        }

        // 4. Müşteriye Bildirim Gönder (E-Posta ve SMS)
        $usr_stmt = $db->prepare("SELECT u.id as user_id, u.name, u.email, u.phone, o.order_number FROM orders o JOIN users u ON o.user_id = u.id WHERE o.id = ?");
        $usr_stmt->execute([$order_id]);
        $usr = $usr_stmt->fetch();

        $mail_icerik = "Merhaba {$usr['name']},<br><br><b>#{$usr['order_number']}</b> numaralı siparişinize ait iptal talebiniz <b>ONAYLANMIŞTIR</b>.<br>Ücret iadeniz bankanıza iletilmiş olup, bankanızın işlem süresine bağlı olarak 1-3 iş günü içinde kartınıza yansıyacaktır.";
        if(!empty($admin_note)) { $mail_icerik .= "<br><br><b>Not:</b> " . htmlspecialchars($admin_note); }
        
        sendSystemMail($usr['email'], "Sipariş İptaliniz Onaylandı", $mail_icerik);
        sms_send_simple($usr['phone'], "Sayin {$usr['name']}, #{$usr['order_number']} nolu siparis iptaliniz onaylanmistir. Ucret iadeniz bankaniza iletilmistir. SinavKocu");

        // BİLDİRİM TETİKLEYİCİ: İptal Onaylandı
        if($usr['user_id'] > 0) {
            $bildirim_metni = "#{$usr['order_number']} numaralı siparişinize ait iptal talebiniz onaylanmış ve ücret iadeniz bankanıza iletilmiştir.";
            siteBildirimGonder($usr['user_id'], "İptal Talebiniz Onaylandı", $bildirim_metni, "siparis-detay.php?id={$order_id}", "bi-check-circle text-success");
        }

        $db->commit();
        $_SESSION['alert_message'] = "<div class='alert alert-success shadow-sm'><i class='bi bi-check-circle-fill me-2'></i> İptal talebi onaylandı! Stoklar geri yüklendi ve müşteriye E-Posta / SMS gönderildi.</div>";

    } catch (Exception $e) {
        $db->rollBack();
        $_SESSION['alert_message'] = "<div class='alert alert-danger shadow-sm'>İşlem Hatası: " . $e->getMessage() . "</div>";
    }

    // PRG Yönlendirmesi
    header("Location: iptaller.php");
    exit;
}

/**
 * --- İŞLEM 2: İPTAL TALEBİNİ REDDET ---
 */
if (isset($_POST['reject_cancellation'])) {
    $request_id = (int)$_POST['request_id'];
    $order_id = (int)$_POST['order_id'];
    $admin_note = trim($_POST['admin_note']); // Ret sebebi (Örn: Kargoya verildi takip kodu: XYZ)

    if (empty($admin_note)) {
        $_SESSION['alert_message'] = "<div class='alert alert-warning shadow-sm'>Reddetme işlemi için müşteriye bir açıklama/not girmelisiniz.</div>";
    } else {
        try {
            $db->beginTransaction();

            // 1. Talebi Reddet
            $db->prepare("UPDATE order_returns SET status = 'rejected', admin_note = ?, updated_at = NOW() WHERE id = ?")
               ->execute([$admin_note, $request_id]);

            // 2. Siparişin Üzerindeki Kilidi Kaldır (Sipariş normal sürecine devam etsin)
            $db->prepare("UPDATE orders SET is_cancel_requested = 0 WHERE id = ?")
               ->execute([$order_id]);

            // 3. Müşteriye Bildirim Gönder (E-Posta ve SMS)
            $usr_stmt = $db->prepare("SELECT u.id as user_id, u.name, u.email, u.phone, o.order_number FROM orders o JOIN users u ON o.user_id = u.id WHERE o.id = ?");
            $usr_stmt->execute([$order_id]);
            $usr = $usr_stmt->fetch();

            $mail_icerik = "Merhaba {$usr['name']},<br><br><b>#{$usr['order_number']}</b> numaralı siparişinize ait iptal talebiniz <b>REDDEDİLMİŞTİR</b>.<br><br><b>Açıklama:</b> " . htmlspecialchars($admin_note) . "<br><br>Eğer siparişiniz kargoya verildiyse, teslim aldıktan sonra yasal süre içinde iade talebi oluşturabilirsiniz.";
            sendSystemMail($usr['email'], "İptal Talebiniz Hakkında Bilgilendirme", $mail_icerik);

            // GÜNCELLEME: Reddetme işlemi için SMS eklendi
            $sms_metni = "Sayin {$usr['name']}, #{$usr['order_number']} nolu siparis iptal talebiniz reddedilmistir. Detaylar e-posta adresinize iletilmistir. SinavKocu";
            sms_send_simple($usr['phone'], $sms_metni);

            // BİLDİRİM TETİKLEYİCİ: İptal Reddedildi
            if($usr['user_id'] > 0) {
                $bildirim_metni = "#{$usr['order_number']} numaralı siparişinizin iptal talebi reddedilmiştir. Not: " . htmlspecialchars($admin_note);
                siteBildirimGonder($usr['user_id'], "İptal Talebiniz Reddedildi", $bildirim_metni, "siparis-detay.php?id={$order_id}", "bi-x-circle text-danger");
            }

            $db->commit();
            $_SESSION['alert_message'] = "<div class='alert alert-secondary shadow-sm'><i class='bi bi-info-circle-fill me-2'></i> İptal talebi reddedildi ve sipariş üzerindeki kilit kaldırıldı. Müşteriye E-Posta / SMS gönderildi.</div>";

        } catch (Exception $e) {
            $db->rollBack();
            $_SESSION['alert_message'] = "<div class='alert alert-danger shadow-sm'>İşlem Hatası: " . $e->getMessage() . "</div>";
        }
    }

    // PRG Yönlendirmesi
    header("Location: iptaller.php");
    exit;
}

// --- TALEPLERİ ÇEK ---
$sql = "
    SELECT 
        r.*, o.order_number, o.total_amount, o.status as order_status,
        u.name, u.surname, u.email, u.phone
    FROM order_returns r
    JOIN orders o ON r.order_id = o.id
    JOIN users u ON r.user_id = u.id
    WHERE r.request_type = 'cancellation'
    ORDER BY FIELD(r.status, 'pending', 'approved', 'rejected'), r.created_at DESC
";
$talepler = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);

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

<div class="row mb-4 align-items-center">
    <div class="col-md-8">
        <h2 class="fw-bold mb-0 text-dark"><i class="bi bi-x-octagon text-danger me-2"></i>İptal Talepleri (Kargo Öncesi)</h2>
        <p class="text-muted small mt-1">Siparişi kargolanmadan önce vazgeçip iptal etmek isteyen müşterilerin taleplerini buradan yönetin.</p>
    </div>
</div>

<?= $mesaj; ?>

<div class="card shadow-sm border-0 mb-5 rounded-4 overflow-hidden">
    <div class="card-body p-0">
        <div class="table-responsive text-dark">
            <table class="table table-hover align-middle mb-0">
                <thead class="table-dark">
                    <tr>
                        <th class="ps-4 py-3">Tarih</th>
                        <th>Sipariş / Tutar</th>
                        <th>Müşteri Bilgisi</th>
                        <th>İptal Sebebi / Müşteri Notu</th>
                        <th class="text-center">Talep Durumu</th>
                        <th class="text-end pe-4">Aksiyon</th>
                    </tr>
                </thead>
                <tbody>
                    <?php if (count($talepler) > 0): ?>
                        <?php foreach ($talepler as $talep): ?>
                        <tr class="<?= $talep['status'] == 'pending' ? 'bg-warning bg-opacity-10' : '' ?>">
                            <td class="ps-4 text-muted small">
                                <div class="fw-bold text-dark"><?= date('d.m.Y', strtotime($talep['created_at'])) ?></div>
                                <?= date('H:i', strtotime($talep['created_at'])) ?>
                            </td>
                            <td>
                                <a href="detay.php?id=<?= $talep['order_id'] ?>" class="fw-bold text-decoration-none text-primary d-block">#<?= htmlspecialchars($talep['order_number']) ?></a>
                                <span class="fw-bold text-success fs-6"><?= number_format($talep['total_amount'], 2, ',', '.') ?> ₺</span>
                            </td>
                            <td>
                                <div class="fw-bold"><?= htmlspecialchars($talep['name'] . ' ' . $talep['surname']) ?></div>
                                <div class="text-muted small"><i class="bi bi-telephone me-1"></i><?= htmlspecialchars($talep['phone']) ?></div>
                            </td>
                            <td style="max-width: 300px;">
                                <div class="fw-bold text-danger small text-uppercase mb-1"><?= htmlspecialchars($talep['reason']) ?></div>
                                <?php if($talep['customer_note']): ?>
                                    <p class="text-muted small mb-0 fst-italic">"<?= htmlspecialchars($talep['customer_note']) ?>"</p>
                                <?php else: ?>
                                    <span class="text-muted small">-</span>
                                <?php endif; ?>
                            </td>
                            <td class="text-center">
                                <?php if($talep['status'] == 'pending'): ?>
                                    <span class="badge bg-warning text-dark px-3 py-2 rounded-pill"><i class="bi bi-hourglass-split"></i> Onay Bekliyor</span>
                                <?php elseif($talep['status'] == 'approved'): ?>
                                    <span class="badge bg-success px-3 py-2 rounded-pill"><i class="bi bi-check-lg"></i> Onaylandı (İade Edildi)</span>
                                <?php else: ?>
                                    <span class="badge bg-secondary px-3 py-2 rounded-pill"><i class="bi bi-x-lg"></i> Reddedildi</span>
                                <?php endif; ?>
                            </td>
                            <td class="text-end pe-4">
                                <?php if($talep['status'] == 'pending'): ?>
                                    <button type="button" class="btn btn-sm btn-success fw-bold shadow-sm rounded-pill px-3 mb-1" onclick="openApproveModal(<?= $talep['id'] ?>, <?= $talep['order_id'] ?>, '<?= htmlspecialchars($talep['order_number']) ?>')">
                                        <i class="bi bi-check2"></i> Onayla
                                    </button>
                                    <button type="button" class="btn btn-sm btn-danger fw-bold shadow-sm rounded-pill px-3 mb-1" onclick="openRejectModal(<?= $talep['id'] ?>, <?= $talep['order_id'] ?>, '<?= htmlspecialchars($talep['order_number']) ?>')">
                                        <i class="bi bi-x-lg"></i> Reddet
                                    </button>
                                <?php else: ?>
                                    <button type="button" class="btn btn-sm btn-light border shadow-sm rounded-pill px-3" onclick="alert('Admin Notu: <?= htmlspecialchars(addslashes($talep['admin_note'] ?? 'Not Yok')) ?>')">
                                        <i class="bi bi-info-circle me-1"></i> Notu Gör
                                    </button>
                                <?php endif; ?>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                    <?php else: ?>
                        <tr>
                            <td colspan="6" class="text-center py-5 text-muted">
                                <i class="bi bi-check-circle fs-1 d-block mb-3 text-success"></i>
                                <h5>Bekleyen İptal Talebi Yok</h5>
                                <p class="small mb-0">Müşterilerden gelen iptal talepleri burada listelenecektir.</p>
                            </td>
                        </tr>
                    <?php endif; ?>
                </tbody>
            </table>
        </div>
    </div>
</div>

<div class="modal fade" id="approveModal" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered">
        <div class="modal-content border-0 shadow-lg rounded-4">
            <form action="" method="POST">
                <div class="modal-header bg-success text-white">
                    <h5 class="modal-title fw-bold"><i class="bi bi-check-circle-fill me-2"></i> İptali Onayla ve Ücreti İade Et</h5>
                    <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body p-4">
                    <p class="text-dark"><b>#<span id="approveOrderNo"></span></b> numaralı siparişin iptalini onaylıyorsunuz.</p>
                    <div class="alert alert-warning small">
                        <i class="bi bi-exclamation-triangle-fill me-1"></i> Bu işlem; siparişi iptal edecek, stokları geri yükleyecek ve müşteriye "Ücretiniz bankanıza iade edilmiştir" maili atacaktır. Finans panelinizden veya sanal posunuzdan iadeyi yapmayı unutmayınız.
                    </div>
                    <input type="hidden" name="request_id" id="approveRequestId">
                    <input type="hidden" name="order_id" id="approveOrderId">
                    <div class="mb-3">
                        <label class="form-label small fw-bold text-muted">Müşteriye İletilecek Ekstra Not (Opsiyonel)</label>
                        <textarea name="admin_note" class="form-control border-2" rows="2" placeholder="Örn: Bizi tercih ettiğiniz için teşekkür ederiz..."></textarea>
                    </div>
                </div>
                <div class="modal-footer bg-light">
                    <button type="button" class="btn btn-secondary fw-bold rounded-pill" data-bs-dismiss="modal">Vazgeç</button>
                    <button type="submit" name="approve_cancellation" class="btn btn-success fw-bold rounded-pill px-4">Onayla ve Tamamla</button>
                </div>
            </form>
        </div>
    </div>
</div>

<div class="modal fade" id="rejectModal" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered">
        <div class="modal-content border-0 shadow-lg rounded-4">
            <form action="" method="POST">
                <div class="modal-header bg-danger text-white">
                    <h5 class="modal-title fw-bold"><i class="bi bi-x-circle-fill me-2"></i> İptal Talebini Reddet</h5>
                    <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body p-4">
                    <p class="text-dark"><b>#<span id="rejectOrderNo"></span></b> numaralı siparişin iptal talebini reddediyorsunuz.</p>
                    <div class="alert alert-info small">
                        Sipariş üzerindeki iptal kilidi kalkacak ve olağan akışına devam edecektir.
                    </div>
                    <input type="hidden" name="request_id" id="rejectRequestId">
                    <input type="hidden" name="order_id" id="rejectOrderId">
                    <div class="mb-3">
                        <label class="form-label small fw-bold text-muted">Ret Sebebi / Müşteriye İletilecek Not (Zorunlu)</label>
                        <textarea name="admin_note" class="form-control border-2" rows="3" placeholder="Örn: Siparişiniz kargoya verilmiştir. Takip Kodu: XYZ. Lütfen ürünü teslim aldıktan sonra İADE talebi oluşturunuz." required></textarea>
                    </div>
                </div>
                <div class="modal-footer bg-light">
                    <button type="button" class="btn btn-secondary fw-bold rounded-pill" data-bs-dismiss="modal">Vazgeç</button>
                    <button type="submit" name="reject_cancellation" class="btn btn-danger fw-bold rounded-pill px-4">Talebi Reddet</button>
                </div>
            </form>
        </div>
    </div>
</div>

<script>
function openApproveModal(reqId, orderId, orderNo) {
    document.getElementById('approveRequestId').value = reqId;
    document.getElementById('approveOrderId').value = orderId;
    document.getElementById('approveOrderNo').innerText = orderNo;
    var modal = new bootstrap.Modal(document.getElementById('approveModal'));
    modal.show();
}

function openRejectModal(reqId, orderId, orderNo) {
    document.getElementById('rejectRequestId').value = reqId;
    document.getElementById('rejectOrderId').value = orderId;
    document.getElementById('rejectOrderNo').innerText = orderNo;
    var modal = new bootstrap.Modal(document.getElementById('rejectModal'));
    modal.show();
}
</script>

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