<?php
declare(strict_types=1);
require_once dirname(__FILE__) . '/../config.php';

/**
 * POST /voucher/verify.php
 * Verifica que un voucher exista, esté activo (status=0) y tenga saldo (restante > 0).
 * Cualquier usuario puede usar cualquier voucher válido.
 *
 * Body JSON: { "idv": 123 }
 *
 * Respuesta OK:
 * { "success": true, "data": { "idv": 123, "total": 500, "restante": 350 } }
 *
 * Respuesta error:
 * { "success": false, "message": "..." }
 */

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    jsonErr(405, 'Método no permitido.');
}

$body = json_decode(file_get_contents('php://input'), true) ?? [];
$idv  = isset($body['idv']) ? (int)$body['idv'] : 0;

if ($idv <= 0) {
    jsonErr(400, 'Número de voucher inválido.');
}

try {
    $db = getDB();

    $stmt = $db->prepare(
        'SELECT idv, total, restante, status
         FROM voucher
         WHERE idv = ? AND status = 0 AND restante > 0
         LIMIT 1'
    );
    $stmt->execute([$idv]);
    $row = $stmt->fetch();

    if (!$row) {
        // Dar mensaje más específico según el motivo
        $stmtCheck = $db->prepare('SELECT idv, status, restante FROM voucher WHERE idv = ? LIMIT 1');
        $stmtCheck->execute([$idv]);
        $check = $stmtCheck->fetch();

        if (!$check) {
            jsonErr(404, 'Voucher no encontrado.');
        }
        if ((int)$check['status'] !== 0) {
            jsonErr(400, 'Este voucher ya fue utilizado completamente.');
        }
        if ((float)$check['restante'] <= 0) {
            jsonErr(400, 'Este voucher no tiene saldo disponible.');
        }
        jsonErr(400, 'Voucher no válido.');
    }

    jsonOk([
        'idv'      => (int)$row['idv'],
        'total'    => (float)$row['total'],
        'restante' => (float)$row['restante'],
    ]);

} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Error interno: ' . $e->getMessage()], JSON_UNESCAPED_UNICODE);
    exit;
}
