<?php
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    session_start();
    include "conexion.php";
    include "funciones.php";

    if (!isset($_SESSION['usuario'])) {
        header("Location: index.php");
        exit();
    }

    $idinv = $_GET['id'];

    // Obtener datos del inversionista
    $sql_inversionista = "SELECT nominv FROM inversionista WHERE idinv = ?";
    $stmt_inversionista = $conn->prepare($sql_inversionista);
    $stmt_inversionista->bind_param("i", $idinv);
    $stmt_inversionista->execute();
    $result_inversionista = $stmt_inversionista->get_result();
    $inversionista = $result_inversionista->fetch_assoc();

    // Obtener la primera fecha de inversión
    $sql_primera_fecha = "SELECT MIN(fecinv) AS primera_fecha FROM inversion WHERE idinv = ?";
    $stmt_primera_fecha = $conn->prepare($sql_primera_fecha);
    $stmt_primera_fecha->bind_param("i", $idinv);
    $stmt_primera_fecha->execute();
    $result_primera_fecha = $stmt_primera_fecha->get_result();
    $primera_fecha = $result_primera_fecha->fetch_assoc()['primera_fecha'];

    // Obtener la fecha seleccionada del formulario
    $fecha_filtro = isset($_POST['fecha_filtro']) ? $_POST['fecha_filtro'] : date("Y-m-d");

    // Validar que la fecha seleccionada sea válida
    if ($fecha_filtro < $primera_fecha) {
        $fecha_filtro = $primera_fecha;
    }

    // Obtener movimientos hasta la fecha
    $sql_movimientos = "SELECT idreginv, fecinv as fecha_calculo, mntinv, reninv 
                       FROM inversion 
                       WHERE idinv = ? AND fecinv <= ? 
                       ORDER BY fecinv";

    $stmt_movimientos = $conn->prepare($sql_movimientos);
    $stmt_movimientos->bind_param("is", $idinv, $fecha_filtro);
    $stmt_movimientos->execute();
    $result_movimientos = $stmt_movimientos->get_result();

    // Variables de acumulación
    $total_inversiones = 0;
    $total_retiros = 0;
    $total_rendimientos = 0;
    $saldo_acumulado = 0;
    $contador = 1;

    // Recopilar todos los eventos (inversiones + rendimientos)
    $eventos = [];

    while ($row = $result_movimientos->fetch_assoc()) {
        $fecha_inversion = $row['fecha_calculo'];
        $monto = $row['mntinv'];
        $idreginv = $row['idreginv'];
        $rendimiento_anual = $row['reninv'];

        // Evento de inversión
        $eventos[] = [
            'tipo' => 'inversion',
            'fecha' => $fecha_inversion,
            'monto' => $monto,
            'idreginv' => $idreginv,
            'rendimiento_anual' => $rendimiento_anual
        ];

        // Generar tramos de rendimiento hasta la fecha_filtro
        $tramos = calcular_rendimientos_compuestos_por_mes($fecha_inversion, $monto, $rendimiento_anual, $fecha_filtro);

        foreach ($tramos as $tramo) {
            $eventos[] = [
                'tipo' => 'rendimiento',
                'fecha' => $tramo['fecha'],
                'monto' => $tramo['rendimiento'],
                'dias' => $tramo['dias'],
                'es_fin_de_mes' => $tramo['es_fin_de_mes'],
                'idreginv' => $idreginv,
                'rendimiento_anual' => $rendimiento_anual
            ];
        }
    }

    // Ordenar eventos por fecha (inversiones primero si misma fecha)
    usort($eventos, function($a, $b) {
        if ($a['fecha'] === $b['fecha']) {
            return ($a['tipo'] === 'inversion') ? -1 : 1; // Inversión antes que rendimiento
        }
        return strcmp($a['fecha'], $b['fecha']);
    });

    // Consolidar por fecha
    $saldos_por_fecha = [];

    foreach ($eventos as $evento) {
        $fecha_evento = $evento['fecha'];

        // Aplicar evento al saldo
        if ($evento['tipo'] === 'inversion') {
            $saldo_acumulado += $evento['monto'];
            if ($evento['monto'] >= 0) {
                $total_inversiones += $evento['monto'];
            } else {
                $total_retiros += abs($evento['monto']);
            }
        } elseif ($evento['tipo'] === 'rendimiento') {
            $saldo_acumulado += $evento['monto'];
            $total_rendimientos += $evento['monto'];
        }

        // Si la fecha no existe, crear registro inicial
        if (!isset($saldos_por_fecha[$fecha_evento])) {
            $saldos_por_fecha[$fecha_evento] = [
                'no' => $contador++,
                'fecha' => $fecha_evento,
                'inversion' => 0,
                'retiro' => 0,
                'dias' => '',
                'rendimientos' => 0,
                'es_fin_de_mes' => false,
                'rendimiento_anual' => $evento['rendimiento_anual'] ?? 0,
                'saldo' => $saldo_acumulado,
                'idreginv' => $evento['idreginv'] ?? null
            ];
        }

        // Acumular valores en la fecha existente
        if ($evento['tipo'] === 'inversion') {
            $saldos_por_fecha[$fecha_evento]['inversion'] += $evento['monto'];
            if ($evento['monto'] < 0) {
                $saldos_por_fecha[$fecha_evento]['retiro'] += abs($evento['monto']);
            }
        } elseif ($evento['tipo'] === 'rendimiento') {
            $saldos_por_fecha[$fecha_evento]['rendimientos'] += $evento['monto'];
            $saldos_por_fecha[$fecha_evento]['dias'] = $evento['dias']; // último valor
            $saldos_por_fecha[$fecha_evento]['es_fin_de_mes'] = $evento['es_fin_de_mes'];
        }

        // Actualizar saldo final de la fecha
        $saldos_por_fecha[$fecha_evento]['saldo'] = $saldo_acumulado;
    }

    // Convertir a array indexado
    $movimientos = array_values($saldos_por_fecha);

    // Formatear montos para mostrar (solo en vista)
    foreach ($movimientos as &$mov) {
        // Si no hubo inversión, dejar vacío (no mostrar 0)
        $mov['inversion'] = ($mov['inversion'] != 0) ? $mov['inversion'] : '';
        $mov['retiro'] = ($mov['retiro'] != 0) ? $mov['retiro'] : '';
        $mov['rendimientos'] = ($mov['rendimientos'] != 0) ? $mov['rendimientos'] : '';
    }
    unset($mov); // Romper referencia

    // Agregar fila de Saldo Total
    $movimientos[] = [
        'no' => '',
        'idreginv' => '',
        'fecha' => 'Saldo Total',
        'inversion' => '',
        'retiro' => '',
        'dias' => '',
        'rendimientos' => '',
        'es_fin_de_mes' => false,
        'rendimiento_anual' => '',
        'saldo' => $saldo_acumulado
    ];

    $saldo_total = $saldo_acumulado;
?>
<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8">
        <title>Detalle del Inversionista</title>
        <link rel="stylesheet" href="style.css">
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css  " rel="stylesheet">
        <style>
            body { font-family: Arial, sans-serif; margin: 20px; }
            table { width: 100%; border-collapse: collapse; margin-top: 20px; }
            th, td { border: 1px solid black; padding: 8px; text-align: left; }
            th { background-color: #d3d3d3; color: black; }
            .saldo { font-weight: bold; background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <nav>
            <ul>
                <li><a href="inicio_moderno.php">Inicio</a></li>
                <li><a href="inversion.php">Registrar Inversion</a></li>
                <li><a href="inversionista_moderno.php">Inversionistas</a></li>
            </ul>
        </nav>
        <h1>Detalle de <?php echo htmlspecialchars($inversionista['nominv']); ?></h1>

        <form method="POST" action="" class="d-flex align-items-center flex-wrap gap-2 mb-3">
            <div class="d-flex align-items-center gap-2">
                <label for="fecha_filtro" class="form-label mb-0">Fecha:</label>
                <input type="date" class="form-control form-control-sm" id="fecha_filtro" name="fecha_filtro"
                       value="<?php echo htmlspecialchars($fecha_filtro); ?>" min="<?php echo htmlspecialchars($primera_fecha); ?>" required
                       style="width: auto; max-width: 200px;">
            </div>
            <div class="d-flex gap-2">
                <button type="submit" class="btn btn-primary btn-sm px-3">Generar</button>
            </div>
        </form>

        <table>
            <tr>
                <th>No.</th>
                <th>Fecha-Inversion</th>
                <th>Inversión</th>
                <th>Retiro</th>
                <th>Días</th>
                <th>Rendimiento</th>
                <th>Acciones</th>
                <th>Saldo</th>
            </tr>
            <?php foreach ($movimientos as $movimiento): ?>
            <tr class="<?php echo ($movimiento['fecha'] === 'Saldo Total') ? 'saldo' : ''; ?>">
                <td><?php echo $movimiento['no']; ?></td>
                <td><?php echo htmlspecialchars($movimiento['fecha']); ?></td>
                <td><?php echo ($movimiento['inversion'] !== '') ? number_format($movimiento['inversion'], 2) : ''; ?></td>
                <td><?php echo ($movimiento['retiro'] !== '') ? number_format($movimiento['retiro'], 2) : ''; ?></td>
                <td><?php echo $movimiento['dias']; ?></td>
                <td><?php echo ($movimiento['rendimientos'] !== '') ? number_format($movimiento['rendimientos'], 2) : ''; ?></td>
                <td>
                    <?php if ($movimiento['fecha'] !== 'Saldo Total' && $movimiento['inversion'] !== ''): ?>
                        <button class="btn btn-warning btn-sm" 
                                onclick="editarInversion(
                                    <?php echo $movimiento['idreginv']; ?>, 
                                    '<?php echo $movimiento['fecha']; ?>', 
                                    <?php echo $movimiento['inversion']; ?>,
                                    <?php echo $movimiento['rendimiento_anual']; ?>)">
                            Editar
                        </button>
                        <button class="btn btn-danger btn-sm" 
                                onclick="eliminarInversion(<?php echo $movimiento['idreginv']; ?>)">
                            Eliminar
                        </button>
                    <?php endif; ?>
                </td>
                <td><?php echo isset($movimiento['saldo']) ? number_format($movimiento['saldo'], 2) : ''; ?></td>
            </tr>
            <?php endforeach; ?>
        </table>

        <!-- Modal para editar -->
        <div class="modal fade" id="modalEditar" tabindex="-1" aria-labelledby="modalEditarLabel" aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title" id="modalEditarLabel">Editar Inversión</h5>
                        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
                    </div>
                    <div class="modal-body">
                        <form id="formEditar">
                            <input type="hidden" id="idreginv" name="idreginv">
                            <div class="mb-3">
                                <label for="fecha" class="form-label">Fecha</label>
                                <input type="date" class="form-control" id="fecha" name="fecha" required>
                            </div>
                            <div class="mb-3">
                                <label for="monto" class="form-label">Monto</label>
                                <input type="number" step="0.01" class="form-control" id="monto" name="monto" required>
                            </div>
                            <div class="mb-3">
                                <label for="rendimiento_anual" class="form-label">Rendimiento Anual (%)</label>
                                <input type="number" step="0.01" class="form-control" id="rendimiento_anual" name="rendimiento_anual" required>
                            </div>
                        </form>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
                        <button type="button" class="btn btn-primary" onclick="guardarCambios()">Guardar cambios</button>
                    </div>
                </div>
            </div>
        </div>

        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js  "></script>
        <script>
            function editarInversion(idreginv, fecha, monto, rendimiento_anual) {
                document.getElementById('idreginv').value = idreginv;
                document.getElementById('fecha').value = fecha;
                document.getElementById('monto').value = monto;
                document.getElementById('rendimiento_anual').value = rendimiento_anual;
                new bootstrap.Modal(document.getElementById('modalEditar')).show();
            }

            function eliminarInversion(idreginv) {
                if (confirm("¿Estás seguro de eliminar esta inversión?")) {
                    window.location.href = `eliminar_inversion.php?id=${idreginv}&idinv=<?php echo $idinv; ?>`;
                }
            }

            function guardarCambios() {
                const form = document.getElementById('formEditar');
                const formData = new FormData(form);
                fetch('editar_inversion.php', {
                    method: 'POST',
                    body: formData
                }).then(res => res.json())
                  .then(data => {
                      alert(data.success ? "Cambios guardados" : "Error al guardar");
                      if (data.success) window.location.reload();
                  });
            }
        </script>
    </body>
</html>
<?php $conn->close(); ?>