<?php
require_once('ketnoi.php');
header('Content-Type: application/json; charset=utf-8');

// Kiểm tra đăng nhập
if(!isset($_SESSION['session'])) {
    echo json_encode(['status'=>'error','message'=>'Vui lòng đăng nhập!']);
    exit();
}

$session = $_SESSION['session'];
$user = $ketnoi->query("SELECT * FROM `users` WHERE `session`='$session'")->fetch_array();
if(empty($user['id'])) {
    echo json_encode(['status'=>'error','message'=>'Phiên đăng nhập hết hạn!']);
    exit();
}

// Lấy code từ POST
$code = trim($_POST['code'] ?? '');
if($code === '') {
    echo json_encode(['status'=>'error','message'=>'Vui lòng nhập mã giftcode!']);
    exit();
}

$code = strtoupper($code);
$username = $user['username'];
$today = date('Y-m-d');

// Kiểm tra giftcode tồn tại
$gc = $ketnoi->query("SELECT * FROM `giftcode` WHERE `code`='$code' AND `status`=1")->fetch_assoc();
if(!$gc) {
    echo json_encode(['status'=>'error','message'=>'Mã giftcode không tồn tại hoặc đã hết hạn!']);
    exit();
}

// Kiểm tra hạn sử dụng
if(!empty($gc['expire_date']) && $gc['expire_date'] < $today) {
    echo json_encode(['status'=>'error','message'=>'Mã giftcode đã hết hạn sử dụng!']);
    exit();
}

// Kiểm tra số lần dùng
if($gc['used'] >= $gc['max_use']) {
    echo json_encode(['status'=>'error','message'=>'Mã giftcode đã đạt giới hạn lượt sử dụng!']);
    exit();
}

// Kiểm tra user đã dùng code này chưa
$check = $ketnoi->query("SELECT id FROM `giftcode_history` WHERE `username`='$username' AND `code`='$code'")->fetch_assoc();
if($check) {
    echo json_encode(['status'=>'error','message'=>'Bạn đã sử dụng mã giftcode này rồi!']);
    exit();
}

// Bắt đầu transaction
$ketnoi->begin_transaction();

try {
    $money = (int)$gc['money'];

    // Cộng tiền cho user
    $updateUser = $ketnoi->query("UPDATE `users` SET `money`=`money`+$money WHERE `id`='{$user['id']}'");
    if(!$updateUser) throw new Exception('Không thể cập nhật số dư!');

    // Tăng lượt dùng của giftcode
    $updateGc = $ketnoi->query("UPDATE `giftcode` SET `used`=`used`+1 WHERE `id`='{$gc['id']}'");
    if(!$updateGc) throw new Exception('Không thể cập nhật giftcode!');

    // Ghi lịch sử
    $insertHistory = $ketnoi->query("INSERT INTO `giftcode_history` (`username`,`code`,`money`,`used_at`) VALUES ('$username','$code',$money,NOW())");
    if(!$insertHistory) throw new Exception('Không thể ghi lịch sử!');

    // Commit
    $ketnoi->commit();

    // Lấy số dư mới
    $newUser = $ketnoi->query("SELECT `money` FROM `users` WHERE `id`='{$user['id']}'")->fetch_assoc();
    $newBalance = (int)$newUser['money'];

    echo json_encode([
        'status'      => 'success',
        'message'     => 'Nhận giftcode thành công!',
        'code'        => $code,
        'money'       => $money,
        'new_balance' => $newBalance
    ]);

} catch(Exception $e) {
    $ketnoi->rollback();
    echo json_encode(['status'=>'error','message'=>'Lỗi hệ thống: '.$e->getMessage()]);
}