<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

require_once __DIR__ . '/../config.php';

$db   = getDB();
$body = json_decode(file_get_contents('php://input'), true);

$rfc      = isset($body['rfc'])      ? strtoupper(trim($body['rfc'])) : '';
$codigo   = isset($body['codigo'])   ? trim($body['codigo'])          : '';
$password = isset($body['password']) ? trim($body['password'])        : '';

if (empty($rfc) || empty($codigo) || empty($password)) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'RFC, código y nueva contraseña son requeridos']);
    exit;
}
if (strlen($password) < 6) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'La contraseña debe tener al menos 6 caracteres']);
    exit;
}

// Buscar id_inver e idusuario por RFC
$stmt = $db->prepare(
    "SELECT i.id_inver, u.idusuario
     FROM inversionista i
     INNER JOIN usuario u ON u.inversionista_id_inver = i.id_inver
     WHERE u.nom_usr = ? LIMIT 1"
);
$stmt->execute([$rfc]);
$inv = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$inv) {
    http_response_code(404);
    echo json_encode(['success' => false, 'message' => 'RFC no encontrado']);
    exit;
}

$id_inver  = (int)$inv['id_inver'];
$idusuario = (int)$inv['idusuario'];

// Verificar código en verify_codes (sin depender de columna 'id')
$now = date('Y-m-d H:i:s');
$vq  = $db->prepare(
    "SELECT codigo FROM verify_codes
     WHERE id_inver = ? AND tipo = 'recover' AND expira > ?
     ORDER BY expira DESC
     LIMIT 1"
);
$vq->execute([$id_inver, $now]);
$row = $vq->fetch(PDO::FETCH_ASSOC);

if (!$row) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'El código ha expirado. Solicita uno nuevo.']);
    exit;
}

if ($row['codigo'] !== $codigo) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'Código incorrecto. Verifica e intenta de nuevo.']);
    exit;
}

// Actualizar contraseña (texto plano, igual que el sistema actual)
$upd = $db->prepare("UPDATE usuario SET passw = ? WHERE idusuario = ?");
$upd->execute([$password, $idusuario]);

// Eliminar código usado
$db->prepare("DELETE FROM verify_codes WHERE id_inver = ? AND tipo = 'recover'")
   ->execute([$id_inver]);

echo json_encode(['success' => true, 'data' => ['message' => 'Contraseña actualizada correctamente']]);
