<?php
session_start();
require_once __DIR__ . '/../config/db_auto.php';
require_once __DIR__ . '/logger.php';
require_once __DIR__ . '/system_logger.php';

use function App\Logger\log_activity;

$logger = SystemLogger::getInstance();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $token = $_POST['token'] ?? '';
    $password = $_POST['password'] ?? '';
    $password_confirm = $_POST['password_confirm'] ?? '';

    if (empty($token) || empty($password) || empty($password_confirm)) {
        // Redirigir a una página de error genérica o de vuelta al formulario
        header('Location: ../views/reset_password.php?token=' . urlencode($token) . '&error=faltan_datos');
        exit;
    }

    if ($password !== $password_confirm) {
        header('Location: ../views/reset_password.php?token=' . urlencode($token) . '&error=no_coinciden');
        exit;
    }

    // Verificar el token de nuevo antes de actualizar
    $stmt = $pdo->prepare("SELECT id FROM usuarios WHERE reset_token = ? AND reset_token_expires > NOW()");
    $stmt->execute([$token]);
    $user = $stmt->fetch();

    if ($user) {
        $hashed_password = password_hash($password, PASSWORD_DEFAULT);

        // Actualizar contraseña e invalidar el token
        $updateStmt = $pdo->prepare("UPDATE usuarios SET password = ?, reset_token = NULL, reset_token_expires = NULL WHERE id = ?");
        $updateStmt->execute([$hashed_password, $user['id']]);

        // Obtener nombre de usuario para el log
        $stmt_get_user = $pdo->prepare("SELECT usuario FROM usuarios WHERE id = ?");
        $stmt_get_user->execute([$user['id']]);
        $username = $stmt_get_user->fetchColumn();

        // Log con el sistema nuevo
        $logger->auth('Contraseña restablecida', "Usuario '$username' restableció su contraseña mediante token de recuperación");

        // Log con el sistema anterior (mantener compatibilidad)
        log_activity('Recuperación de Contraseña', "El usuario '{$username}' restableció su contraseña mediante el enlace de recuperación.");

        // Redirigir al login con mensaje de éxito
        header('Location: ../views/login.php?success=password_reset');
        exit;
    } else {
        $logger->warning('Token de recuperación inválido', "Token: $token desde IP: " . ($_SERVER['REMOTE_ADDR'] ?? 'N/A'));
        header('Location: ../views/reset_password.php?token=' . urlencode($token) . '&error=token_invalido');
        exit;
    }
}
