<?php
require_once 'includes/header.php';
require_once 'db/config.php';

// Redirigir si el usuario no tiene el rol de Administrador General
if (!isset($_SESSION['user_rol']) || $_SESSION['user_rol'] !== 'Administrador General') {
    header('Location: /index.php?error=unauthorized');
    exit;
}

$pdo = db();

// --- Manejar Formularios (Agregar Inversión) ---
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_investment'])) {
    $fecha = $_POST['fecha'] ?? date('Y-m-d');
    $descripcion = trim($_POST['descripcion'] ?? '');
    $monto = $_POST['monto'] ?? 0;
    $tipo = $_POST['tipo'] ?? '';

    if (!empty($descripcion) && is_numeric($monto) && $monto > 0 && !empty($tipo)) {
        try {
            $stmt = $pdo->prepare("INSERT INTO inversiones (fecha, descripcion, monto, tipo) VALUES (?, ?, ?, ?)");
            $stmt->execute([$fecha, $descripcion, $monto, $tipo]);
            
            // Redirigir para evitar reenvío de formulario
            header("Location: " . $_SERVER['PHP_SELF'] . "?success=true#section-" . $tipo);
            exit;
        } catch (PDOException $e) {
            $error_message = "Error al guardar en la base de datos: " . $e->getMessage();
        }
    } else {
        $error_message = "Por favor, complete todos los campos correctamente.";
    }
}

// --- Filtrado por Mes ---
$selected_month = $_GET['mes'] ?? null;
$selected_year = $_GET['anio'] ?? null;
$filter_active = $selected_month && $selected_year;

// --- Obtener todos los datos de inversiones (con filtro si aplica) ---
try {
    $sql = "SELECT * FROM inversiones";
    $params = [];
    if ($filter_active) {
        $sql .= " WHERE MONTH(fecha) = ? AND YEAR(fecha) = ?";
        $params = [$selected_month, $selected_year];
    }
    $sql .= " ORDER BY fecha DESC, id DESC";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $all_inversiones = $stmt->fetchAll(PDO::FETCH_ASSOC);

} catch (PDOException $e) {
    die("Error al obtener los datos: " . $e->getMessage());
}

// --- Obtener totales por mes (esto no se filtra) ---
try {
    $stmt_totals = $pdo->query("
        SELECT 
            DATE_FORMAT(fecha, '%Y') as anio,
            DATE_FORMAT(fecha, '%m') as mes_num,
            DATE_FORMAT(fecha, '%M %Y') as mes_nombre,
            SUM(monto) as total_monto
        FROM 
            inversiones 
        GROUP BY 
            anio, mes_num, mes_nombre
        ORDER BY 
            anio DESC, mes_num DESC
    ");
    $monthly_totals = $stmt_totals->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    die("Error al obtener los totales mensuales: " . $e->getMessage());
}


// Separar por tipo
$inversiones_operativas = array_filter($all_inversiones, fn($inv) => $inv['tipo'] === 'operativa');
$inversiones_operacionales = array_filter($all_inversiones, fn($inv) => $inv['tipo'] === 'operacional');
$inversiones_ads = array_filter($all_inversiones, fn($inv) => $inv['tipo'] === 'ads');

// Función para renderizar una sección de inversión
function render_investment_section($title, $type, $data, $description_label) {
    $total = array_sum(array_column($data, 'monto'));
?>
    <div class="container mt-5" id="section-<?= htmlspecialchars($type) ?>">
        <h2><?= htmlspecialchars($title) ?></h2>
        <div class="card">
            <div class="card-body">
                <!-- Formulario para agregar -->
                <form method="POST" action="<?= $_SERVER['PHP_SELF'] ?>#section-<?= htmlspecialchars($type) ?>" class="mb-4">
                    <input type="hidden" name="tipo" value="<?= htmlspecialchars($type) ?>">
                    <div class="row align-items-end g-3">
                        <div class="col-md-3">
                            <label for="fecha_<?= htmlspecialchars($type) ?>" class="form-label">Fecha</label>
                            <input type="date" class="form-control" id="fecha_<?= htmlspecialchars($type) ?>" name="fecha" value="<?= date('Y-m-d') ?>" required>
                        </div>
                        <div class="col-md-5">
                            <label for="desc_<?= htmlspecialchars($type) ?>" class="form-label"><?= htmlspecialchars($description_label) ?></label>
                            <input type="text" class="form-control" id="desc_<?= htmlspecialchars($type) ?>" name="descripcion" required>
                        </div>
                        <div class="col-md-2">
                            <label for="monto_<?= htmlspecialchars($type) ?>" class="form-label">Monto (S/)</label>
                            <input type="number" step="0.01" class="form-control" id="monto_<?= htmlspecialchars($type) ?>" name="monto" required>
                        </div>
                        <div class="col-md-2">
                            <button type="submit" name="add_investment" class="btn btn-primary w-100">Agregar</button>
                        </div>
                    </div>
                </form>

                <!-- Tabla de datos -->
                <div class="table-responsive">
                    <table class="table table-bordered table-striped table-hover">
                        <thead class="table-dark">
                            <tr>
                                <th style="width: 15%;">Fecha</th>
                                <th>Descripción</th>
                                <th style="width: 15%;">Monto (S/)</th>
                                <th style="width: 15%;">Acciones</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php if (empty($data)): ?>
                                <tr>
                                    <td colspan="4" class="text-center">No hay registros.</td>
                                </tr>
                            <?php else: ?>
                                <?php foreach ($data as $item): ?>
                                    <tr>
                                        <td><?= htmlspecialchars(date("d/m/Y", strtotime($item['fecha']))) ?></td>
                                        <td><?= htmlspecialchars($item['descripcion']) ?></td>
                                        <td><?= number_format($item['monto'], 2) ?></td>
                                        <td>
                                            <a href="editar_inversion.php?id=<?= $item['id'] ?>" class="btn btn-warning btn-sm">Editar</a>
                                            <a href="eliminar_inversion.php?id=<?= $item['id'] ?>" class="btn btn-danger btn-sm" onclick="return confirm('¿Estás seguro de que quieres eliminar este registro?');">Eliminar</a>
                                        </td>
                                    </tr>
                                <?php endforeach; ?>
                            <?php endif; ?>
                        </tbody>
                        <tfoot>
                            <tr class="table-dark fw-bold">
                                <td colspan="2" class="text-end">TOTAL:</td>
                                <td><?= number_format($total, 2) ?></td>
                                <td></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>
            </div>
        </div>
    </div>
<?php
}
?>

<div class="container-fluid mt-4">
    <h1>Gestión de Inversiones</h1>
    <hr>
    <?php if (isset($error_message)): ?>
        <div class="alert alert-danger"><?= htmlspecialchars($error_message) ?></div>
    <?php endif; ?>
    <?php if (isset($_GET['success'])): ?>
        <div class="alert alert-success">Registro guardado exitosamente.</div>
    <?php endif; ?>

    <!-- Resumen de Totales por Mes -->
    <div class="container mt-4 mb-5">
        <h2>Resumen de Inversiones por Mes</h2>
        <div class="card">
            <div class="card-body">
                <div class="table-responsive">
                    <table class="table table-bordered table-hover">
                        <thead class="table-dark">
                            <tr>
                                <th>Mes</th>
                                <th>Monto Total (S/)</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php if (empty($monthly_totals)): ?>
                                <tr>
                                    <td colspan="2" class="text-center">No hay datos para mostrar.</td>
                                </tr>
                            <?php else: ?>
                                <?php foreach ($monthly_totals as $total): ?>
                                    <tr style="cursor: pointer;" onclick="window.location='inversiones_operativas.php?mes=<?= $total['mes_num'] ?>&anio=<?= $total['anio'] ?>'">
                                        <td><?= htmlspecialchars(ucfirst($total['mes_nombre'])) ?></td>
                                        <td><?= number_format($total['total_monto'], 2) ?></td>
                                    </tr>
                                <?php endforeach; ?>
                            <?php endif; ?>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>

    <?php if ($filter_active): ?>
    <div class="container mb-4">
        <div class="d-flex justify-content-between align-items-center">
            <h3 class="mb-0">Mostrando Inversiones de: <strong><?= htmlspecialchars(ucfirst(strftime('%B %Y', mktime(0, 0, 0, $selected_month, 1, $selected_year)))) ?></strong></h3>
            <a href="inversiones_operativas.php" class="btn btn-info">Mostrar Todos los Meses</a>
        </div>
        <hr>
    </div>
    <?php endif; ?>

</div>

<?php
// Renderizar las tres secciones
render_investment_section("Inversion Mercaderia", "operativa", $inversiones_operativas, "Descripción de la Inversión");
render_investment_section("Inversiones en Ads", "ads", $inversiones_ads, "Descripción del Gasto de Publicidad");
render_investment_section("Inversiones Operacionales", "operacional", $inversiones_operacionales, "Descripción del Gasto");

require_once 'includes/footer.php'; 
?>