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

use function App\Logger\log_activity;

header('Content-Type: application/json');

// Verificar si el usuario está autenticado
if (!isset($_SESSION['user_id'])) {
    http_response_code(401); // Unauthorized
    echo json_encode(['success' => false, 'error' => 'No autenticado. Por favor, inicie sesión de nuevo.']);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $input = json_decode(file_get_contents('php://input'), true);
    $current_password = $input['current_password'] ?? '';
    $new_password = $input['new_password'] ?? '';
    $new_password_confirm = $input['new_password_confirm'] ?? '';
    $user_id = $_SESSION['user_id'];

    if (empty($current_password) || empty($new_password) || empty($new_password_confirm)) {
        http_response_code(400); // Bad Request
        echo json_encode(['success' => false, 'error' => 'Todos los campos son obligatorios.']);
        exit;
    }

    if ($new_password !== $new_password_confirm) {
        http_response_code(400);
        echo json_encode(['success' => false, 'error' => 'Las nuevas contraseñas no coinciden.']);
        exit;
    }

    // Obtener la contraseña actual de la base de datos
    $stmt = $pdo->prepare("SELECT password FROM usuarios WHERE id = ?");
    $stmt->execute([$user_id]);
    $user = $stmt->fetch();

    if (!$user || !password_verify($current_password, $user['password'])) {
        http_response_code(400);
        echo json_encode(['success' => false, 'error' => 'La contraseña actual es incorrecta.']);
        exit;
    }

    // Hashear la nueva contraseña y actualizar la base de datos
    $new_hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
    $updateStmt = $pdo->prepare("UPDATE usuarios SET password = ? WHERE id = ?");

    if ($updateStmt->execute([$new_hashed_password, $user_id])) {
        log_activity('Cambio de Contraseña', "El usuario {$_SESSION['usuario']} cambió su propia contraseña.");
        echo json_encode(['success' => true, 'message' => 'Contraseña actualizada correctamente.']);
    } else {
        http_response_code(500); // Internal Server Error
        echo json_encode(['success' => false, 'error' => 'Error al actualizar la contraseña en la base de datos.']);
    }
}
