<?php
/**
 * TechShop Perú - API Aplicar Cupón de Descuento
 */

header('Content-Type: application/json; charset=utf-8');

define('SECURE_ACCESS', true);
require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/functions.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['success' => false, 'message' => 'Método no permitido']);
    exit;
}

if (!csrf_verify()) {
    echo json_encode(['success' => false, 'message' => 'Token de seguridad inválido. Recarga la página e inténtalo de nuevo.']);
    exit;
}

$codigo = strtoupper(trim($_POST['codigo'] ?? ''));

if (empty($codigo)) {
    // Si el código está vacío, se remueve el cupón actual
    unset($_SESSION['cupon']);
    echo json_encode(['success' => true, 'message' => 'Cupón removido correctamente']);
    exit;
}

try {
    $db = db();
    $stmt = $db->prepare('
        SELECT * FROM cupones 
        WHERE UPPER(codigo) = ? AND activo = 1 
        LIMIT 1
    ');
    $stmt->execute([$codigo]);
    $cupon = $stmt->fetch();

    if (!$cupon) {
        echo json_encode(['success' => false, 'message' => 'El cupón ingresado no es válido o ha expirado.']);
        exit;
    }

    $ahora = date('Y-m-d H:i:s');
    if ($cupon['fecha_inicio'] && $ahora < $cupon['fecha_inicio']) {
        echo json_encode(['success' => false, 'message' => 'Este cupón aún no se encuentra activo.']);
        exit;
    }

    if ($cupon['fecha_expiracion'] && $ahora > $cupon['fecha_expiracion']) {
        echo json_encode(['success' => false, 'message' => 'Este cupón ha expirado.']);
        exit;
    }

    if ($cupon['usos_maximos'] !== null && $cupon['usos_actuales'] >= $cupon['usos_maximos']) {
        echo json_encode(['success' => false, 'message' => 'Este cupón ha alcanzado el límite máximo de usos.']);
        exit;
    }

    $subtotalCarrito = cart_total();
    if ($subtotalCarrito < (float)$cupon['minimo_compra']) {
        echo json_encode([
            'success' => false, 
            'message' => 'Este cupón requiere una compra mínima de ' . format_precio((float)$cupon['minimo_compra'])
        ]);
        exit;
    }

    // Guardar cupón en la sesión
    $_SESSION['cupon'] = [
        'id' => $cupon['id'],
        'codigo' => $cupon['codigo'],
        'tipo' => $cupon['tipo'],
        'valor' => (float)$cupon['valor'],
        'descripcion' => $cupon['descripcion']
    ];

    echo json_encode([
        'success' => true, 
        'message' => '¡Cupón "' . e($cupon['codigo']) . '" aplicado correctamente!',
        'cupon' => $_SESSION['cupon']
    ]);

} catch (PDOException $e) {
    echo json_encode(['success' => false, 'message' => 'Error al validar el cupón']);
}
