<?php
session_start();
include "conexion.php";
include "funciones.php";

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

// Obtener el ID del inversionista desde GET
$idinv = isset($_GET['id']) ? intval($_GET['id']) : 0;
$fecha_filtro = isset($_GET['fecha']) ? $_GET['fecha'] : date('Y-m-d');

if ($idinv <= 0) {
    die("ID de inversionista inválido");
}

// Obtener información del inversionista
$stmt_inv = $conn->prepare("SELECT idinv, nominv FROM inversionista WHERE idinv = ?");
$stmt_inv->bind_param("i", $idinv);
$stmt_inv->execute();
$result_inv = $stmt_inv->get_result();

if ($result_inv->num_rows === 0) {
    die("Inversionista no encontrado");
}

$inv_data = $result_inv->fetch_assoc();
$nombre_inversionista = $inv_data['nominv'];

// 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'] ?? date("Y-m-d");

// Obtener la fecha seleccionada del formulario
if ($_SERVER['REQUEST_METHOD'] === '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
usort($eventos, function($a, $b) {
    if ($a['fecha'] === $b['fecha']) {
        return ($a['tipo'] === 'inversion') ? -1 : 1;
    }
    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'];
    }

    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
        ];
    }

    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'];
        $saldos_por_fecha[$fecha_evento]['es_fin_de_mes'] = $evento['es_fin_de_mes'];
    }

    $saldos_por_fecha[$fecha_evento]['saldo'] = $saldo_acumulado;
}

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

// Formatear montos
foreach ($movimientos as &$mov) {
    $mov['inversion'] = ($mov['inversion'] != 0) ? $mov['inversion'] : '';
    $mov['retiro'] = ($mov['retiro'] != 0) ? $mov['retiro'] : '';
    $mov['rendimientos'] = ($mov['rendimientos'] != 0) ? $mov['rendimientos'] : '';
}
unset($mov);

// 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">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Historial de <?php echo htmlspecialchars($nombre_inversionista); ?></title>
    <link rel="stylesheet" href="style_moderno.css">
    <style>
        .historial-header {
            background: linear-gradient(135deg, var(--primary), var(--primary-dark));
            color: white;
            padding: 20px;
            border-radius: 15px;
            margin-bottom: 30px;
        }
        .historial-header h3 {
            margin: 0 0 10px 0;
            font-size: 24px;
        }
        .historial-header p {
            margin: 0;
            opacity: 0.9;
        }
        tr.fila-par {
            background-color: #d4edda;
        }
        tr.fila-impar {
            background-color: #f8f9fa;
        }
        tr.saldo {
            font-weight: bold;
            background-color: #e9ecef !important;
            font-size: 16px;
        }
        .form-filtro {
            background: white;
            padding: 20px;
            border-radius: 10px;
            margin-bottom: 20px;
            box-shadow: var(--shadow);
        }
    </style>
</head>
<body>
    <div class="main-wrapper">
        <!-- Sidebar -->
        <aside class="sidebar">
            <div class="sidebar-header">
                <h2>💼 Financiera</h2>
                <p>Sistema de Gestión</p>
            </div>
            <ul class="sidebar-menu">
                <li class="menu-item">
                    <a href="inicio_moderno.php">
                        <span class="menu-icon">🏠</span>
                        Inicio
                    </a>
                </li>
                <li class="menu-item">
                    <a href="inversionista_moderno.php">
                        <span class="menu-icon">👥</span>
                        Inversionistas
                    </a>
                </li>
                <li class="menu-item">
                    <a href="inversion_moderno.php">
                        <span class="menu-icon">💰</span>
                        Inversiones
                    </a>
                </li>
                <li class="menu-item">
                    <a href="retiro_moderno.php">
                        <span class="menu-icon">💸</span>
                        Retiros
                    </a>
                </li>
                <li class="menu-item">
                    <a href="saldo_moderno.php" class="active">
                        <span class="menu-icon">📊</span>
                        Saldos
                    </a>
                </li>
                <li class="menu-item">
                    <a href="usuario_moderno.php">
                        <span class="menu-icon">👤</span>
                        Usuarios
                    </a>
                </li>
                <li class="menu-item">
                    <a href="respaldo_base.php">
                        <span class="menu-icon">💾</span>
                        Respaldos
                    </a>
                </li>
                <li class="menu-item">
                    <a href="index.php" style="color: #ef4444;">
                        <span class="menu-icon">🚪</span>
                        Cerrar Sesión
                    </a>
                </li>
            </ul>
        </aside>

        <!-- Contenido Principal -->
        <main class="main-content">
            <div class="historial-header">
                <h3>📜 Historial de Movimientos</h3>
                <p><strong>Inversionista:</strong> <?= htmlspecialchars($nombre_inversionista) ?></p>
            </div>

            <div class="form-filtro">
                <form method="POST" action="" class="cards-grid" style="grid-template-columns: 2fr 1fr;">
                    <div class="form-group">
                        <label for="fecha_filtro">Mostrar movimientos hasta:</label>
                        <input type="date" id="fecha_filtro" name="fecha_filtro"
                               value="<?php echo htmlspecialchars($fecha_filtro); ?>" 
                               min="<?php echo htmlspecialchars($primera_fecha); ?>" required>
                    </div>
                    <div class="form-group" style="display: flex; align-items: flex-end;">
                        <button type="submit" class="btn" style="width: 100%;">
                            🔍 Actualizar Historial
                        </button>
                    </div>
                </form>
            </div>

            <div class="botones-accion">
                <button class="btn" onclick="window.location.href='saldo_moderno.php'">← Volver a Saldos</button>
                <button class="btn print-btn" onclick="window.print()">🖨️ Imprimir</button>
            </div>

            <div class="table-container">
                <table>
                    <thead>
                        <tr>
                            <th>No.</th>
                            <th>Fecha</th>
                            <th>Inversión</th>
                            <th>Retiro</th>
                            <th>Días</th>
                            <th>Rendimiento</th>
                            <th>Saldo</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php
                        $indice_fila = 0;
                        foreach ($movimientos as $movimiento):
                            if ($movimiento['fecha'] === 'Saldo Total') {
                                $clase_fila = 'saldo';
                            } else {
                                $clase_fila = ($indice_fila % 2 === 0) ? 'fila-par' : 'fila-impar';
                                $indice_fila++;
                            }
                        ?>
                        <tr class="<?php echo $clase_fila; ?>">
                            <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 htmlspecialchars($movimiento['dias']); ?></td>
                            <td><?php echo ($movimiento['rendimientos'] !== '') ? '$' . number_format($movimiento['rendimientos'], 2) : ''; ?></td>
                            <td><strong>$<?php echo number_format($movimiento['saldo'], 2); ?></strong></td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        </main>
    </div>
</body>
</html>
<?php
$stmt_inv->close();
$stmt_primera_fecha->close();
$stmt_movimientos->close();
$conn->close();
?>
