<?php
require '../config/db.php';
require_once '../app/models/user.php';
session_start();
if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit;
}

ini_set("display_errors", 0);

$countCupons = $pdo->prepare("SELECT SUM(value) AS total_valor_cupons, COUNT(*) AS total_cupons FROM cupons_rescued WHERE status = :status AND user_id = :user_id");
$countCupons->execute([
    ':status' => 'rescued',
    ':user_id' => $user['id']
]);
$fetchCupons = $countCupons->fetch(PDO::FETCH_ASSOC);
$somaCupons = $fetchCupons['total_valor_cupons'] ?? 0;
$contagemCupons = $fetchCupons['total_cupons'] ?? 0;

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["send-rescue"])) {
    $data = filter_input(INPUT_POST, "cupom_code", FILTER_SANITIZE_SPECIAL_CHARS);

    // CONSULTAMOS O CUPOM NA TABELA CUPONS
    $cupom = $pdo->prepare("SELECT * FROM cupons WHERE code = :code AND expire_at > :expire_at AND status = :status");
    $cupom->execute([
        ':code' => $data,
        ':expire_at' => date('Y-m-d H:i:s'),
        ':status' => 'active'
    ]);
    $cupomAtt = $cupom->fetch(PDO::FETCH_ASSOC);

    // 1. Validação: Código Inválido, Expirado ou Inativo
    if (!$cupomAtt) {
        // --- ATIVA EFEITO DE ERRO ---
        $_SESSION['toastMessage'] = 'Código inválido, expirado ou inativo! Verifique seu bilhete.';
        $_SESSION['toastType'] = 'error'; // ESSENCIAL PARA O SHAKE
        header("Location: cupom_rescue.php");
        exit;
    }

    // Contagem de resgates desse cupom do usuario especifico
    $stmtCount = $pdo->prepare('SELECT COUNT(*) AS total_desse_resgatado FROM cupons_rescued WHERE user_id = :user_id AND cupom_id = :cupom_id AND code_cupom = :code_cupom');
    $stmtCount->execute([
        ':user_id' => $user['id'],
        ':cupom_id' => $cupomAtt['id'],
        ':code_cupom' => $cupomAtt['code']
    ]);
    $total = $stmtCount->fetch(PDO::FETCH_ASSOC);
    $result = $total['total_desse_resgatado'];

    // 2. Validação: Limite de Uso por Usuário Atingido
    if ((int)$result >= (int)$cupomAtt['limit_purchase_user']) {
        // --- ATIVA EFEITO DE ERRO ---
        $_SESSION['toastMessage'] = 'Este Bilhete Dourado já atingiu seu limite máximo de uso por conta!';
        $_SESSION['toastType'] = 'error'; // ESSENCIAL PARA O SHAKE
        header("Location: cupom_rescue.php");
        exit;
    }

    // 3. Validação: Limite de Uso Geral Atingido
    if ((int)$cupomAtt['rescueds'] >= (int)$cupomAtt['limit_purchase_geral']) {
        // Desativa o cupom para que futuras consultas falhem na checagem inicial
        $stmtAcc1 = $pdo->prepare('UPDATE cupons SET status = :status WHERE id = :id');
        $stmtAcc1->execute([':status' => 'disabled', ':id' => $cupomAtt['id']]);
        
        // --- ATIVA EFEITO DE ERRO ---
        $_SESSION['toastMessage'] = 'Infelizmente, o estoque global deste Bilhete Dourado esgotou.';
        $_SESSION['toastType'] = 'error'; // ESSENCIAL PARA O SHAKE
        header("Location: cupom_rescue.php");
        exit;
    }

    // Lógica de Sucesso:
    
    // 1. Adiciona o saldo na carteira do usuário
    $cupomUser = $pdo->prepare("UPDATE users SET balance = balance + :balance WHERE id = :id");
    $cupomUser->execute([
        ':balance' => $cupomAtt['value'],
        ':id' => $user['id']
    ]);

    // 2. Insere na tabela de cupons resgatados
    $rescuedCupom = $pdo->prepare("INSERT INTO cupons_rescued (user_id, user_phone, value, code_cupom, date, status, cupom_id) VALUES (:user_id, :user_phone, :value, :code_cupom, :date, :status, :cupom_id)");
    $rescuedCupom->execute([
        ':user_id' => $user['id'],
        ':cupom_id' => $cupomAtt['id'],
        ':user_phone' => $user['phone'],
        ':value' => $cupomAtt['value'],
        ':code_cupom' => $data,
        ':date' => date('Y-m-d H:i:s'),
        ':status' => 'rescued'
    ]);

    // 3. Atualiza o contador de resgates gerais
    $stmtAcc = $pdo->prepare('UPDATE cupons SET rescueds = rescueds + 1 WHERE id = :id');
    $stmtAcc->execute([':id' => $cupomAtt['id']]);

    // --- ATIVA MODAL E EFEITO DE SUCESSO ---
    $_SESSION['toastMessage'] = 'Parabéns! Bilhete ativado com sucesso! Valor creditado: R$' . number_format($cupomAtt['value'], 2, ',', '.');
    $_SESSION['toastType'] = 'success';
    $_SESSION['show_modal'] = true; // ESSENCIAL PARA O MODAL
    $_SESSION['success_value'] = number_format($cupomAtt['value'], 2, ',', '.'); 
    
    header("Location: cupom_rescue.php");
    exit;
}