<?php
require_once 'config.php';

if (!isLoggedIn()) {
    header('Location: login.php');
    exit;
}

$user_id = $_SESSION['user_id'];

// Get cart items
$stmt = $pdo->prepare("SELECT c.quantity, p.* FROM cart c JOIN products p ON c.product_id = p.id WHERE c.user_id = ?");
$stmt->execute([$user_id]);
$cart_items = $stmt->fetchAll();

if (empty($cart_items)) {
    header('Location: cart.php');
    exit;
}

// Calculate subtotal
$subtotal = 0;
foreach ($cart_items as $item) {
    $subtotal += $item['price'] * $item['quantity'];
}

// Get user points & address
$stmt_user = $pdo->prepare("SELECT points, address, full_name FROM users WHERE id = ?");
$stmt_user->execute([$user_id]);
$user = $stmt_user->fetch();
$user_points = $user['points'] ?? 0;
$shipping_address = $user['address'] ?? '';

$error = '';
$success = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['place_order'])) {
    $address = trim($_POST['shipping_address']);
    $redeem_points = intval($_POST['redeem_points'] ?? 0);
    $card_number = trim($_POST['card_number'] ?? '');
    
    if (empty($address)) {
        $error = "Shipping address is required.";
    } elseif (empty($card_number)) {
        $error = "Credit card details are required.";
    } elseif ($redeem_points < 0 || $redeem_points > $user_points) {
        $error = "Invalid points to redeem.";
    } elseif ($redeem_points > $subtotal) {
        $error = "Points redeemed cannot exceed order subtotal.";
    } else {
        // Calculations
        $discount = $redeem_points; // 1 point = 1 THB discount
        $net_amount = $subtotal - $discount;
        $points_earned = floor($net_amount * POINTS_EARN_RATE);
        
        $pdo->beginTransaction();
        try {
            // 1. Create order record
            $stmt_order = $pdo->prepare("INSERT INTO orders (user_id, total_amount, discount_applied, net_amount, points_earned, points_redeemed, shipping_address) VALUES (?, ?, ?, ?, ?, ?, ?)");
            $stmt_order->execute([$user_id, $subtotal, $discount, $net_amount, $points_earned, $redeem_points, $address]);
            $order_id = $pdo->lastInsertId();
            
            // 2. Create order items & decrease stock
            $stmt_item = $pdo->prepare("INSERT INTO order_items (order_id, product_id, price, quantity) VALUES (?, ?, ?, ?)");
            $stmt_stock = $pdo->prepare("UPDATE products SET stock = stock - ? WHERE id = ?");
            
            foreach ($cart_items as $item) {
                if ($item['stock'] < $item['quantity']) {
                    throw new Exception("Product '{$item['name']}' is out of stock.");
                }
                $stmt_item->execute([$order_id, $item['id'], $item['price'], $item['quantity']]);
                $stmt_stock->execute([$item['quantity'], $item['id']]);
            }
            
            // 3. Update user points (deduct redeemed points, add earned points)
            $new_points = $user_points - $redeem_points + $points_earned;
            $stmt_points = $pdo->prepare("UPDATE users SET points = ? WHERE id = ?");
            $stmt_points->execute([$new_points, $user_id]);
            $_SESSION['user_points'] = $new_points; // update session
            
            // 4. Clear cart
            $stmt_clear = $pdo->prepare("DELETE FROM cart WHERE user_id = ?");
            $stmt_clear->execute([$user_id]);
            
            $pdo->commit();
            header("Location: orders.php?success=1");
            exit;
        } catch (Exception $e) {
            $pdo->rollBack();
            $error = "Order processing failed: " . $e->getMessage();
        }
    }
}
?>
<?php include 'header.php'; ?>

<div class="container">
    <h2>Checkout Outfits 💸</h2>
    
    <?php if (!empty($error)): ?>
        <div class="alert alert-danger" style="margin-top: 15px;"><?php echo $error; ?></div>
    <?php endif; ?>

    <div class="cart-layout" style="margin-top: 30px;">
        <form action="checkout.php" method="POST" style="display: contents;">
            <div>
                <div class="cart-items" style="display: flex; flex-direction: column; gap: 20px;">
                    <h3 style="font-weight: 700; border-bottom: 1px solid var(--gray-border); padding-bottom: 10px;">1. Shipping & Payment Details</h3>
                    
                    <div class="form-group">
                        <label for="shipping_address">Delivery Address *</label>
                        <textarea id="shipping_address" name="shipping_address" class="form-control" rows="3" required><?php echo htmlspecialchars($shipping_address); ?></textarea>
                    </div>

                    <h3 style="font-weight: 700; border-bottom: 1px solid var(--gray-border); padding-bottom: 10px; margin-top: 20px;">2. Pay with Credit Card</h3>
                    
                    <div class="form-group">
                        <label for="card_name">Name on Card *</label>
                        <input type="text" id="card_name" class="form-control" placeholder="JANE DOE" required>
                    </div>

                    <div style="display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 15px;">
                        <div class="form-group">
                            <label for="card_number">Card Number *</label>
                            <input type="text" id="card_number" name="card_number" class="form-control" placeholder="1234 5678 1234 5678" required>
                        </div>
                        <div class="form-group">
                            <label for="card_exp">Expiry *</label>
                            <input type="text" id="card_exp" class="form-control" placeholder="MM/YY" required>
                        </div>
                        <div class="form-group">
                            <label for="card_cvv">CVV *</label>
                            <input type="text" id="card_cvv" class="form-control" placeholder="123" required>
                        </div>
                    </div>

                    <h3 style="font-weight: 700; border-bottom: 1px solid var(--gray-border); padding-bottom: 10px; margin-top: 20px;">3. Loyalty Points Discount</h3>
                    <div class="points-reward" style="flex-direction: column; align-items: flex-start; gap: 5px;">
                        <span style="font-weight: 600;">You have: <?php echo $user_points; ?> points</span>
                        <span style="font-size: 12px; color: var(--text-muted);">Each point gives ฿1.00 discount. Enter points you wish to redeem:</span>
                        <div style="display: flex; gap: 10px; margin-top: 10px; width: 100%;">
                            <input type="number" id="points-input" name="redeem_points" class="form-control" value="0" min="0" max="<?php echo min($user_points, floor($subtotal)); ?>" oninput="updateTotal()" style="width: 120px;">
                            <button type="button" class="btn btn-outline" onclick="applyMaxPoints()" style="padding: 10px 15px;">Apply Max</button>
                        </div>
                    </div>
                </div>
            </div>

            <div>
                <div class="cart-summary">
                    <h3 style="margin-bottom: 20px; font-weight: 700; border-bottom: 1px solid var(--gray-border); padding-bottom: 10px;">Order Summary</h3>
                    
                    <?php foreach ($cart_items as $item): ?>
                        <div style="display: flex; justify-content: space-between; font-size: 14px; margin-bottom: 8px; color: var(--text-muted);">
                            <span><?php echo htmlspecialchars($item['name']); ?> (x<?php echo $item['quantity']; ?>)</span>
                            <span>฿<?php echo number_format($item['price'] * $item['quantity'], 2); ?></span>
                        </div>
                    <?php endforeach; ?>
                    
                    <div class="summary-row" style="border-top: 1px solid var(--gray-border); padding-top: 15px; margin-top: 15px;">
                        <span>Subtotal</span>
                        <strong id="summary-subtotal">฿<?php echo number_format($subtotal, 2); ?></strong>
                    </div>

                    <div class="summary-row">
                        <span>Points Discount</span>
                        <strong style="color: var(--danger);" id="summary-discount">-฿0.00</strong>
                    </div>
                    
                    <div class="summary-row">
                        <span>Shipping Fee</span>
                        <strong style="color: var(--success);">FREE</strong>
                    </div>

                    <div class="summary-row total" style="border-top: 1px solid var(--gray-border); padding-top: 15px;">
                        <span>Net Amount</span>
                        <strong style="color: var(--primary-hover);" id="summary-net">฿<?php echo number_format($subtotal, 2); ?></strong>
                    </div>

                    <button type="submit" name="place_order" class="btn btn-primary" style="width: 100%; display: block; margin-top: 20px;">Pay & Place Order</button>
                </div>
            </div>
        </form>
    </div>
</div>

<script>
const subtotal = <?php echo $subtotal; ?>;
const maxPoints = <?php echo min($user_points, floor($subtotal)); ?>;

function updateTotal() {
    const pointsInput = document.getElementById('points-input');
    let points = parseInt(pointsInput.value) || 0;
    if (points < 0) points = 0;
    if (points > maxPoints) points = maxPoints;
    pointsInput.value = points;
    
    const discount = points;
    const net = subtotal - discount;
    
    document.getElementById('summary-discount').textContent = `-฿` + discount.toFixed(2);
    document.getElementById('summary-net').textContent = `฿` + net.toFixed(2);
}

function applyMaxPoints() {
    document.getElementById('points-input').value = maxPoints;
    updateTotal();
}
</script>

<?php include 'footer.php'; ?>
