<?php
/**
 * SAC 2026 - INITIAL DEBT CONSOLIDATOR v1.2
 * Kernel V4.0.83
 * REPARACIÓN NUCLEAR: Sincronización de rastro por cambio de etiqueta "HISTÓRICA".
 */
require_once 'config.php';

// Limpieza de buffer preventiva
if (ob_get_length()) ob_clean();

if (!isset($_SESSION['user_id'])) response(["error" => "No autorizado"], 401);

try {
    // 1. Obtener todas las propiedades que tienen o tuvieron deuda inicial
    // REPARACIÓN V4.0.83: Se actualiza el LIKE a 'RECUPERACIÓN DEUDA HISTÓRICA%' para coincidir con register_payment.php
    $stmtProps = $pdo->query("SELECT p.id, p.code, p.initial_debt as current_debt, 
                             (SELECT full_name FROM residents r JOIN users u ON r.user_id = u.id WHERE r.property_id = p.id AND r.is_owner = 1 LIMIT 1) as ownerName
                             FROM properties p
                             WHERE p.initial_debt > 0 
                             OR p.code IN (
                                SELECT DISTINCT 
                                    SUBSTRING_INDEX(SUBSTRING_INDEX(description, ':', -1), ' ', 1) 
                                FROM bank_transactions 
                                WHERE description LIKE 'RECUPERACIÓN DEUDA HISTÓRICA%'
                                OR description LIKE 'RECUPERACIÓN DEUDA ANTERIOR%'
                             )
                             ORDER BY p.code ASC");
    $properties = $stmtProps->fetchAll();

    $finalData = [];

    foreach ($properties as $p) {
        $propId = (int)$p['id'];
        $propCode = trim($p['code']);

        // 2. Buscar rastro de pagos en bank_transactions para esta unidad exacta
        // Buscamos ambos términos para compatibilidad con registros antiguos y nuevos (V4.0.83)
        $stmtHistory = $pdo->prepare("SELECT date, description, amount_usd, amount_bs, reference 
                                     FROM bank_transactions 
                                     WHERE (description LIKE ? OR description LIKE ?)
                                     ORDER BY date ASC");
        
        $stmtHistory->execute([
            "RECUPERACIÓN DEUDA HISTÓRICA: $propCode%",
            "RECUPERACIÓN DEUDA ANTERIOR: $propCode%"
        ]);
        
        $historyRaw = $stmtHistory->fetchAll();

        // REPARACIÓN NUCLEAR: Filtrado estricto para evitar colisiones (ej: prop 7 vs 70)
        $history = array_filter($historyRaw, function($h) use ($propCode) {
            $desc = $h['description'];
            // Patrón exacto: "PREFIX: CODE" seguido de espacio o fin de cadena
            $pattern = "/RECUPERACIÓN DEUDA (HISTÓRICA|ANTERIOR): " . preg_quote($propCode) . "([^0-9]|$)/";
            return preg_match($pattern, $desc);
        });

        $totalPaid = 0;
        foreach($history as $h) {
            $totalPaid += (float)$h['amount_usd'];
        }

        // 3. Monto Original = Pendiente Actual + Suma de Pagos Históricos
        $originalDebt = round((float)$p['current_debt'] + $totalPaid, 2);

        // Solo incluir en el listado si hubo deuda inicial real en algún momento
        if ($originalDebt > 0) {
            $finalData[] = [
                "id" => $propId,
                "code" => $propCode,
                "ownerName" => $p['ownerName'] ?? 'SIN PROPIETARIO ASIGNADO',
                "original_debt" => $originalDebt,
                "total_paid" => $totalPaid,
                "current_debt" => (float)$p['current_debt'],
                "history" => $history
            ];
        }
    }

    response(["success" => true, "data" => $finalData]);

} catch (PDOException $e) {
    response(["error" => "Kernel Data Bridge Error: " . $e->getMessage()], 500);
}
?>