<?php
session_start();
include '../includes/session_control.php';

require_once __DIR__ . '/../cotizaciones/api/_node.php';
require_once __DIR__ . '/../includes/user_activity_log.php';

// 1) Incluir autoload de Composer
//   ingreso_movimientos.php está en: public/bancos/ingreso_movimientos.php
//   y vendor/autoload.php está en: public/vendor/autoload.php
require __DIR__ . '/../vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Shared\Date;

// Mensaje de estado para mostrar en pantalla
$message = '';

$token = $_SESSION['node_token'] ?? '';
$hasToken = is_string($token) && trim($token) !== '';
$nodeBase = cpn_node_api_base();

// → PROCESAR SUBIDA Y LECTURA DEL XLSX
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $idBanco = intval($_POST['idBanco'] ?? 0);

    if ($idBanco <= 0) {
        $message = 'Debe seleccionar un banco.';
    } elseif (!isset($_FILES['xlsx_file']) || $_FILES['xlsx_file']['error'] !== UPLOAD_ERR_OK) {
        $message = 'Error al subir el archivo XLSX.';
    } else {
        $tmpFilePath = $_FILES['xlsx_file']['tmp_name'];

        try {
            // Carga el archivo XLSX
            $spreadsheet = IOFactory::load($tmpFilePath);
            $sheet = $spreadsheet->getActiveSheet();
            $highestRow = $sheet->getHighestRow();

            if (!$hasToken) {
                throw new Exception('Token de sesión no disponible. Vuelva a iniciar sesión.');
            }

            $rows = [];

            // Recorre filas (se asume fila 1 = encabezados: "Fecha", "Descripción", "Valor")
            for ($row = 2; $row <= $highestRow; $row++) {
                // −−− 1) Columna A: Fecha −−−
                $cellA = $sheet->getCell('A' . $row)->getValue();
                // Obtiene el formato de número para saber si es fecha de Excel
                $numFormat = $sheet->getStyle('A' . $row)
                    ->getNumberFormat()
                    ->getFormatCode();

                if (is_numeric($cellA) && Date::isDateTime($sheet->getCell('A' . $row))) {
                    // Si Excel almacena la fecha como número (por ejemplo 44561)
                    $phpDateObj = Date::excelToDateTimeObject($cellA);
                    $fecha = $phpDateObj->format('Y-m-d');
                } else {
                    // Si viene como texto: intenta convertir con strtotime
                    $ts = strtotime($cellA);
                    $fecha = $ts ? date('Y-m-d', $ts) : null;
                }

                // −−− 2) Columna B: Descripción −−−
                $descripcion = trim($sheet->getCell('B' . $row)->getValue());

                // −−− 3) Columna C: Valor −−−
                $rawValor = $sheet->getCell('C' . $row)->getValue();
                // Normaliza: quita comas o símbolos de moneda (p. ej. “1.234,56” o “$ 1,234.56”)
                // Ajusta según tu formato de Excel; aquí asumimos punto decimal “.” y coma de miles “,”
                $valor = floatval(str_replace([',', '$', ' '], ['', '', ''], $rawValor));

                // Si la fila está completamente vacía, la omite
                if (empty($fecha) && $descripcion === '' && $valor === 0.0) {
                    continue;
                }

                $rows[] = [
                    'fecha' => $fecha,
                    'descripcion' => $descripcion,
                    'valor' => $valor,
                ];
            }

            $payload = [
                'idBanco' => $idBanco,
                'rows' => $rows,
            ];

            $resp = cpn_node_request('POST', $nodeBase . '/api/bancos/conciliacion/import', $token, $payload);
            if (!($resp['ok'] ?? false)) {
                $errMsg = $resp['error']['message'] ?? 'Error importando movimientos en Node.';
                throw new Exception((string)$errMsg);
            }

            $inserted = intval($resp['data']['inserted'] ?? 0);
            $skipped = intval($resp['data']['skipped'] ?? 0);

            cpn_activity_log_event(
                'Bancos',
                'bancos.conciliacion_import',
                'Importó movimientos bancarios (banco #' . $idBanco . ')',
                'banco',
                $idBanco,
                ['inserted' => $inserted, 'skipped' => $skipped]
            );
            $message = 'Importación Finalizada. Insertados: ' . $inserted . ' | No insertados: ' . $skipped;
        } catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
            $message = 'Error al leer el archivo XLSX: ' . $e->getMessage();
        } catch (Exception $e) {
            $message = 'Error: ' . $e->getMessage();
        }
    }
}


// → OBTENER LISTA DE BANCOS PARA EL SELECTOR (desde Node)
$bancos = [];
if ($hasToken) {
    $resp = cpn_node_request('GET', $nodeBase . '/api/bancos/conciliacion/bancos', $token);
    if (($resp['ok'] ?? false) && is_array($resp['data'] ?? null)) {
        $bancos = $resp['data'];
    } else {
        $message = $message ?: 'No se pudo cargar la lista de bancos.';
    }
} else {
    $message = $message ?: 'Token de sesión no disponible. Vuelva a iniciar sesión.';
}
?>
<?php include '../templates/header.php'; ?>

<h1 class="h3 mb-4 text-gray-800">Importar Movimientos de Banco</h1>

<?php if ($message !== ''): ?>
    <div class="alert alert-info"><?= htmlspecialchars($message) ?></div>
<?php endif; ?>

<div class="card shadow mb-4">
    <div class="card-body">
        <form method="post" enctype="multipart/form-data">
            <!-- 1) Selector de Banco -->
            <div class="form-group">
                <label for="idBanco">Seleccione el Banco</label>
                <select name="idBanco" id="idBanco" class="form-control" required>
                    <option value="">-- Seleccione --</option>
                    <?php foreach ($bancos as $row): ?>
                        <option value="<?= intval($row['id'] ?? 0) ?>">
                            <?= htmlspecialchars((string)($row['nombre'] ?? '')) ?>
                        </option>
                    <?php endforeach; ?>
                </select>
            </div>

            <!-- 2) File Input para XLSX -->
            <div class="form-group">
                <label for="xlsx_file">Archivo XLSX</label>
                <input type="file" name="xlsx_file" id="xlsx_file" accept=".xlsx" class="form-control" required>
            </div>

            <button type="submit" class="btn btn-primary">Importar</button>
        </form>
    </div>
</div>

<script>
    $(function() {
        $('#idBanco').select2({
            width: '100%'
        });
    });
</script>

<?php include '../templates/footer.php'; ?>