<?php
/**
 * Checkout Page
 * CMTC Shopping
 */
require_once __DIR__ . '/../includes/header.php';
require_once __DIR__ . '/../includes/navbar.php';

require_login();

$user_id = $_SESSION['user_id'];
// Fetch user profile
$stmt_u = $db->prepare("SELECT * FROM users WHERE id = ?");
$stmt_u->execute([$user_id]);
$user = $stmt_u->fetch();

// Fetch payment settings
$pay_settings = $db->query("SELECT * FROM payment_settings LIMIT 1")->fetch();

// Fetch cart items from DB
$stmt_c = $db->prepare("
    SELECT ci.id as cart_item_id, ci.quantity, ci.color_id, ci.size_id,
           p.*,
           (SELECT image_path FROM product_images WHERE product_id = p.id ORDER BY is_main DESC, id ASC LIMIT 1) as main_image,
           pc.color_name, ps.size_name
    FROM cart_items ci
    JOIN carts c ON ci.cart_id = c.id
    JOIN products p ON ci.product_id = p.id
    LEFT JOIN product_colors pc ON ci.color_id = pc.id
    LEFT JOIN product_sizes ps ON ci.size_id = ps.id
    WHERE c.user_id = ?
    ORDER BY ci.id DESC
");
$stmt_c->execute([$user_id]);
$cart_rows = $stmt_c->fetchAll();

if (empty($cart_rows)) {
    header("Location: " . base_url('views/cart.php'));
    exit();
}

$error = "";
$success = "";

// Calculate total
$total_amount = 0;
$items_data = [];
foreach ($cart_rows as $row) {
    $price = !empty($row['promo_price']) ? floatval($row['promo_price']) : floatval($row['price']);
    $sub = $price * intval($row['quantity']);
    $total_amount += $sub;
    $items_data[] = [
        'product' => $row,
        'qty' => $row['quantity'],
        'color_name' => $row['color_name'] ?? null,
        'size_name' => $row['size_name'] ?? null,
        'price' => $price,
        'subtotal' => $sub
    ];
}

// Handle Order Creation
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['place_order'])) {
    if (!validate_csrf_token($_POST['csrf_token'] ?? '')) {
        $error = "โทเค็นความปลอดภัยไม่ถูกต้อง";
    } else {
        $shipping_address = trim($_POST['shipping_address'] ?? '');
        $phone = trim($_POST['phone'] ?? '');

        if (empty($shipping_address) || empty($phone)) {
            $error = "กรุณากรอกที่อยู่และเบอร์โทรศัพท์สำหรับจัดส่ง";
        } else {
            try {
                $db->beginTransaction();

                $order_no = 'CMTC-' . date('Ymd') . '-' . strtoupper(substr(uniqid(), -4));

                // 1. Create order
                $stmt_ord = $db->prepare("
                    INSERT INTO orders (order_no, user_id, total_amount, net_amount, status, shipping_address) 
                    VALUES (?, ?, ?, ?, 'pending', ?)
                ");
                $stmt_ord->execute([$order_no, $user_id, $total_amount, $total_amount, $shipping_address]);
                $order_id = $db->lastInsertId();

                // 2. Insert order items
                $stmt_item = $db->prepare("
                    INSERT INTO order_items (order_id, product_id, color_name, size_name, quantity, price, total) 
                    VALUES (?, ?, ?, ?, ?, ?, ?)
                ");
                foreach ($items_data as $it) {
                    $stmt_item->execute([
                        $order_id,
                        $it['product']['id'],
                        $it['color_name'],
                        $it['size_name'],
                        $it['qty'],
                        $it['price'],
                        $it['subtotal']
                    ]);
                }

                $payment_method = $_POST['payment_method'] ?? 'transfer';

                // 3. Handle Payment record
                if ($payment_method === 'cash') {
                    // เก็บเงินปลายทาง (Cash on Delivery)
                    $stmt_pay = $db->prepare("INSERT INTO payments (order_id, payment_method, amount, status) VALUES (?, 'cash', ?, 'pending')");
                    $stmt_pay->execute([$order_id, $total_amount]);
                } else {
                    // โอนผ่านบัญชี / QR PromptPay
                    if (isset($_FILES['slip']) && $_FILES['slip']['error'] === UPLOAD_ERR_OK) {
                        $upload_res = upload_image($_FILES['slip'], 'slips', 'slip');
                        if ($upload_res['success']) {
                            $stmt_pay = $db->prepare("INSERT INTO payments (order_id, payment_method, amount, slip_path, status) VALUES (?, 'transfer', ?, ?, 'pending')");
                            $stmt_pay->execute([$order_id, $total_amount, $upload_res['filename']]);
                            $db->prepare("UPDATE orders SET status = 'paid' WHERE id = ?")->execute([$order_id]);
                        }
                    } else {
                        // ยังไม่ได้แนบสลิป
                        $stmt_pay = $db->prepare("INSERT INTO payments (order_id, payment_method, amount, status) VALUES (?, 'transfer', ?, 'pending')");
                        $stmt_pay->execute([$order_id, $total_amount]);
                    }
                }

                // Clear user cart in DB
                $stmt_clear_cart = $db->prepare("DELETE ci FROM cart_items ci JOIN carts c ON ci.cart_id = c.id WHERE c.user_id = ?");
                $stmt_clear_cart->execute([$user_id]);

                $db->commit();

                // Clear session cart if any
                unset($_SESSION['cart']);

                header("Location: " . base_url("views/order_detail.php?id=$order_id"));
                exit();
            } catch (Exception $e) {
                $db->rollBack();
                $error = "เกิดข้อผิดพลาดในการสร้างคำสั่งซื้อ: " . $e->getMessage();
            }
        }
    }
}
?>

<div class="container my-5">
    <h3 class="fw-bold mb-4"><i class="bi bi-credit-card-2-back-fill text-primary me-2"></i>ยืนยันคำสั่งซื้อและการชำระเงิน</h3>

    <?php if (!empty($error)): ?>
        <div class="alert alert-danger mb-4"><?php echo $error; ?></div>
    <?php endif; ?>

    <form method="POST" enctype="multipart/form-data">
        <input type="hidden" name="csrf_token" value="<?php echo get_csrf_token(); ?>">

        <div class="row g-4">
            <div class="col-lg-7">
                <!-- Shipping Info -->
                <div class="card border-0 shadow-sm glass-card p-4 mb-4">
                    <h5 class="fw-bold mb-3"><i class="bi bi-geo-alt-fill text-primary me-2"></i>ข้อมูลผู้รับและการจัดส่ง</h5>
                    <div class="mb-3">
                        <label class="form-label">ชื่อ-นามสกุลผู้รับ *</label>
                        <input type="text" class="form-control" value="<?php echo sanitize($user['prefix'] . $user['firstname'] . ' ' . $user['lastname']); ?>" readonly>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">เบอร์โทรศัพท์ติดต่อ *</label>
                        <input type="tel" name="phone" class="form-control" value="<?php echo sanitize($user['phone']); ?>" required>
                    </div>
                    <div class="mb-3">
                        <label class="form-label fw-bold"><i class="bi bi-truck me-1"></i>ที่อยู่สำหรับการจัดส่ง / รับสินค้า *</label>
                        
                        <!-- Cascading Address Selector -->
                        <div class="row g-2 mb-2">
                            <div class="col-md-6">
                                <label class="form-label small text-muted mb-1">ภาค *</label>
                                <select id="checkout_region" class="form-select form-select-sm" required>
                                    <option value="">-- เลือกภาค --</option>
                                </select>
                            </div>
                            <div class="col-md-6">
                                <label class="form-label small text-muted mb-1">จังหวัด *</label>
                                <select id="checkout_province" class="form-select form-select-sm" disabled required>
                                    <option value="">-- เลือกจังหวัด --</option>
                                </select>
                            </div>
                            <div class="col-md-6">
                                <label class="form-label small text-muted mb-1">อำเภอ / เขต *</label>
                                <select id="checkout_district" class="form-select form-select-sm" disabled required>
                                    <option value="">-- เลือกอำเภอ/เขต --</option>
                                </select>
                            </div>
                            <div class="col-md-6">
                                <label class="form-label small text-muted mb-1">ตำบล / แขวง *</label>
                                <select id="checkout_subdistrict" class="form-select form-select-sm" disabled required>
                                    <option value="">-- เลือกตำบล/แขวง --</option>
                                </select>
                            </div>
                            <div class="col-md-4">
                                <label class="form-label small text-muted mb-1">รหัสไปรษณีย์ *</label>
                                <input type="text" id="checkout_zipcode" class="form-control form-control-sm" placeholder="รหัสไปรษณีย์" readonly required>
                            </div>
                            <div class="col-md-8">
                                <label class="form-label small text-muted mb-1">บ้านเลขที่ / หมู่ / ซอย / ถนน *</label>
                                <input type="text" id="checkout_houseno" class="form-control form-control-sm" placeholder="เช่น 123/45 ม.2 ถ.สุขุมวิท" required>
                            </div>
                        </div>

                        <!-- Real field to submit -->
                        <textarea name="shipping_address" id="shipping_address" class="form-control d-none" required><?php echo sanitize($user['address'] ?? ''); ?></textarea>
                        <div class="form-text small text-muted"><i class="bi bi-info-circle me-1"></i>ระบบจะรวมที่อยู่จัดส่งและรหัสไปรษณีย์ให้อัตโนมัติจากตัวเลือกด้านบน</div>
                    </div>
                </div>

                <!-- Payment Info -->
                <div class="card border-0 shadow-sm glass-card p-4">
                    <h5 class="fw-bold mb-3"><i class="bi bi-wallet2 text-primary me-2"></i>เลือกช่องทางการชำระเงิน *</h5>

                    <!-- Payment Method Radio Options -->
                    <div class="row g-3 mb-3">
                        <div class="col-md-6">
                            <div class="form-check p-3 border rounded-3 h-100 bg-body-tertiary payment-option-card">
                                <input class="form-check-input ms-0 me-2" type="radio" name="payment_method" id="pay_promptpay" value="transfer" checked onchange="togglePaymentView()">
                                <label class="form-check-label fw-bold d-block cursor-pointer" for="pay_promptpay">
                                    <i class="bi bi-qr-code text-primary me-1"></i> โอนเงิน / QR PromptPay
                                    <span class="d-block small text-muted fw-normal mt-1">สแกนจ่ายผ่านแอปธนาคาร พร้อมแนบสลิป</span>
                                </label>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="form-check p-3 border rounded-3 h-100 bg-body-tertiary payment-option-card">
                                <input class="form-check-input ms-0 me-2" type="radio" name="payment_method" id="pay_cod" value="cash" onchange="togglePaymentView()">
                                <label class="form-check-label fw-bold d-block cursor-pointer" for="pay_cod">
                                    <i class="bi bi-cash-stack text-success me-1"></i> เก็บเงินปลายทาง (COD)
                                    <span class="d-block small text-muted fw-normal mt-1">ชำระเงินสดกับเจ้าหน้าที่จัดส่งเมื่อได้รับสินค้า</span>
                                </label>
                            </div>
                        </div>
                    </div>

                    <!-- PromptPay Details Box -->
                    <div id="promptpay_box">
                        <div class="text-center p-3 bg-light rounded border mb-3">
                            <?php if (!empty($pay_settings['qr_image'])): ?>
                                <img src="<?php echo base_url('uploads/qrcode/' . sanitize($pay_settings['qr_image'])); ?>" class="img-fluid rounded mb-2 shadow-xs" style="max-height: 200px;">
                            <?php endif; ?>
                            <div class="fw-bold text-primary mt-1">พร้อมเพย์: <?php echo sanitize($pay_settings['promptpay_no'] ?? '0888888888'); ?></div>
                            <div class="text-muted small">ชื่อบัญชี: <?php echo sanitize($pay_settings['account_name'] ?? 'CMTC Shopping'); ?></div>
                        </div>

                        <div class="mb-3">
                            <label class="form-label fw-bold small">แนบสลิปการโอนเงิน (หากโอนเงินแล้ว)</label>
                            <input type="file" name="slip" class="form-control" accept="image/jpeg,image/png,image/webp">
                            <small class="text-muted">สามารถแนบสลิปทันทีตอนนี้ หรือแนบย้อนหลังได้ในหน้าประวัติคำสั่งซื้อ</small>
                        </div>
                    </div>

                    <!-- COD Details Box -->
                    <div id="cod_box" class="d-none">
                        <div class="alert alert-success border-0 d-flex align-items-center mb-0">
                            <i class="bi bi-check-circle-fill fs-4 me-3 text-success"></i>
                            <div>
                                <h6 class="fw-bold mb-1">บริการเก็บเงินปลายทาง (COD)</h6>
                                <p class="small mb-0 text-secondary">กรุณาเตรียมเงินสดให้พอดีกับยอดชำระ <strong class="text-dark"><?php echo format_price($total_amount); ?></strong> เมื่อพนักงานนำพัสดุไปส่งมอบ</p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="col-lg-5">
                <!-- Summary Card -->
                <div class="card border-0 shadow-sm glass-card p-4">
                    <h5 class="fw-bold mb-3">สรุปรายการ</h5>
                    <ul class="list-group list-group-flush mb-3">
                        <?php foreach ($items_data as $it): ?>
                            <li class="list-group-item d-flex justify-content-between align-items-center bg-transparent px-0">
                                <div>
                                    <div class="fw-semibold text-truncate" style="max-width: 220px;"><?php echo sanitize($it['product']['name']); ?></div>
                                    <small class="text-muted">x <?php echo $it['qty']; ?></small>
                                </div>
                                <span class="fw-bold"><?php echo format_price($it['subtotal']); ?></span>
                            </li>
                        <?php endforeach; ?>
                    </ul>
                    <div class="d-flex justify-content-between mb-2">
                        <span class="text-muted">ค่าจัดส่ง</span>
                        <span class="text-success fw-bold">ฟรี</span>
                    </div>
                    <hr>
                    <div class="d-flex justify-content-between mb-4">
                        <span class="fw-bold fs-5">ยอดชำระทั้งหมด</span>
                        <span class="fw-bold fs-4 text-primary"><?php echo format_price($total_amount); ?></span>
                    </div>

                    <button type="submit" name="place_order" class="btn btn-primary w-100 py-3 fw-bold shadow">
                        <i class="bi bi-check2-circle me-1"></i> ยืนยันการสั่งซื้อ
                    </button>
                </div>
            </div>
        </div>
    </form>
</div>

<script src="<?php echo base_url('assets/js/thai_address.js'); ?>"></script>
<script>
function togglePaymentView() {
    const isCod = document.getElementById('pay_cod').checked;
    const promptpayBox = document.getElementById('promptpay_box');
    const codBox = document.getElementById('cod_box');

    if (isCod) {
        promptpayBox.classList.add('d-none');
        codBox.classList.remove('d-none');
    } else {
        promptpayBox.classList.remove('d-none');
        codBox.classList.add('d-none');
    }
}

document.addEventListener('DOMContentLoaded', function() {
    initThaiAddressSelector({
        region: '#checkout_region',
        province: '#checkout_province',
        district: '#checkout_district',
        subdistrict: '#checkout_subdistrict',
        zipcode: '#checkout_zipcode',
        houseNo: '#checkout_houseno',
        output: '#shipping_address'
    });
});
</script>

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