<?php
/**
 * SAC 2026 - BANPLUS ANALYTICS ENGINE v2.0
 * Arquitecto: Andres Mathison
 * Objetivo: Clasificación procedural de movimientos y preparación de cruce de referencias.
 */
require_once 'config.php';

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

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
    $file = $_FILES['file'];
    $content = file_get_contents($file['tmp_name']);
    $lines = explode("\n", $content);
    
    if (count($lines) < 3) response(["error" => "Archivo CSV insuficiente"], 400);

    // 1. Metadatos
    $headerLine = $lines[0];
    $metadata = ["account" => "S/A", "owner" => "S/A"];
    if (preg_match('/Cuenta:\s*(\d+)/', $headerLine, $matches)) $metadata['account'] = $matches[1];
    if (preg_match('/Titular:\s*(.+)/', $headerLine, $matches)) $metadata['owner'] = trim($matches[1]);

    // 2. Procesamiento Procedural
    $movements = [];
    $summary = []; // Para acumular por tipo

    $cleanNum = function($str) {
        $str = trim($str);
        if (empty($str)) return 0.0;
        $str = str_replace(".", "", $str);
        $str = str_replace(",", ".", $str);
        return (float)$str;
    };

    for ($i = 2; $i < count($lines); $i++) {
        $line = trim($lines[$i]);
        if (empty($line)) continue;

        $cols = explode(";", $line);
        if (count($cols) < 6) continue;

        $desc = strtoupper($cols[2]);
        $ref = str_replace("'", "", $cols[1]);
        $debito = $cleanNum($cols[3]);
        $credito = $cleanNum($cols[4]);
        $monto = ($credito > 0) ? $credito : $debito;
        
        // --- MOTOR DE CATEGORIZACIÓN HEURÍSTICA ---
        $cat = 'OTROS';
        $subCat = 'VARIOS';

        if (strpos($desc, 'COMISION P2C') !== false) { $cat = 'COMISIONES'; $subCat = 'P2C'; }
        elseif (strpos($desc, 'PAGO PLUS COMERCIOS') !== false) { $cat = 'INGRESOS'; $subCat = 'PAGO PLUS'; }
        elseif (strpos($desc, 'COMISION TRANSFERENCIA INMEDIATA') !== false) { $cat = 'COMISIONES'; $subCat = 'TRANSFERENCIA'; }
        elseif (strpos($desc, 'NC TRANSF INMEDIATA') !== false) { $cat = 'INGRESOS'; $subCat = 'NC TRANSF'; }
        elseif (strpos($desc, 'ND TRANSF INMEDIATA') !== false) { $cat = 'EGRESOS'; $subCat = 'ND TRANSF'; }
        elseif (strpos($desc, 'SERVICIO SMS PLUS') !== false) { $cat = 'GASTOS_BANCARIOS'; $subCat = 'SMS'; }
        elseif (strpos($desc, 'ATENCION TELEFONICA') !== false || strpos($desc, 'BANPLUS IVR') !== false) { $cat = 'GASTOS_BANCARIOS'; $subCat = 'ATENCION'; }
        elseif (strpos($desc, 'EMISION DE ESTADO DE CUENTA') !== false) { $cat = 'GASTOS_BANCARIOS'; $subCat = 'ESTADO_CUENTA'; }
        elseif (strpos($desc, 'MANTENIMIENTO DE CUENTA') !== false) { $cat = 'GASTOS_BANCARIOS'; $subCat = 'MANTENIMIENTO'; }
        elseif (strpos($desc, 'CORPOELEC') !== false) { $cat = 'EGRESOS'; $subCat = 'SERVICIOS'; }

        $movements[] = [
            "date" => $cols[0],
            "reference" => $ref,
            "description" => $desc,
            "debit" => $debito,
            "credit" => $credito,
            "balance" => $cleanNum($cols[5]),
            "category" => $cat,
            "subCategory" => $subCat
        ];

        // Acumular totales para el desglose inicial
        $key = $cat . "_" . $subCat;
        if (!isset($summary[$key])) $summary[$key] = ["count" => 0, "total" => 0, "label" => $subCat];
        $summary[$key]["count"]++;
        $summary[$key]["total"] += $monto;
    }

    response([
        "success" => true,
        "metadata" => $metadata,
        "summary" => array_values($summary),
        "movements" => $movements
    ]);

} else {
    response(["error" => "No file"], 400);
}
?>