<?php
require_once 'config.php';

if (!isset($_SESSION['user_id'])) response(["error" => "Sesión requerida"], 401);

$data = json_decode(file_get_contents("php://input"), true);
$userId = $_SESSION['user_id'];

if (!isset($data['formId']) || !isset($data['data'])) {
    response(["error" => "Datos de respuesta inválidos"], 400);
}

try {
    // 1. Obtener la propiedad vinculada al usuario
    $stmtProp = $pdo->prepare("SELECT property_id FROM residents WHERE user_id = ? LIMIT 1");
    $stmtProp->execute([$userId]);
    $userProp = $stmtProp->fetch();

    if (!$userProp) {
        response(["error" => "Su cuenta no tiene una unidad inmobiliaria vinculada en el sistema."], 403);
    }

    $propertyId = $userProp['property_id'];

    // 2. Verificar estatus del formulario
    $checkStatus = $pdo->prepare("SELECT status FROM data_forms WHERE id = ?");
    $checkStatus->execute([$data['formId']]);
    $formStatus = $checkStatus->fetch();
    
    if (!$formStatus || $formStatus['status'] !== 'Activo') {
        response(["error" => "Este formulario ya no acepta más respuestas."], 403);
    }

    // 3. Validar si la propiedad ya respondió
    $checkVote = $pdo->prepare("SELECT id FROM data_form_responses WHERE form_id = ? AND property_id = ?");
    $checkVote->execute([$data['formId'], $propertyId]);
    
    if ($checkVote->fetch()) {
        response(["error" => "Su unidad inmobiliaria ya ha completado este registro anteriormente."], 409);
    }

    /**
     * 4. GUARDADO ATÓMICO (CORRECCIÓN NUCLEAR)
     * El frontend envía el objeto 'response' que contiene un campo 'data'.
     * Guardamos solo el mapa de respuestas para que el GET sea directo.
     */
    $answersMap = isset($data['data']['data']) ? $data['data']['data'] : $data['data'];

    $stmt = $pdo->prepare("INSERT INTO data_form_responses (form_id, user_id, property_id, data_json, submitted_at) VALUES (?, ?, ?, ?, ?)");
    $stmt->execute([
        $data['formId'],
        $userId,
        $propertyId,
        json_encode($answersMap),
        date('Y-m-d H:i:s')
    ]);

    logSystemAction("Completó formulario de censo ID: " . $data['formId'], "CENSOS");

    response(["success" => true, "message" => "Datos registrados exitosamente."]);

} catch (PDOException $e) {
    response(["error" => "Fallo de base de datos al guardar censo: " . $e->getMessage()], 500);
}
?>