<?php
// FILE: nat_logs.php (Powered by ClickHouse + Limit Option)

ini_set('memory_limit', '2048M');
require 'db.php'; // For Admin Check
session_start();

if (!isset($_SESSION['username']) || $_SESSION['username'] !== 'admin') { die("Access Denied"); }

// --- CLICKHOUSE HELPER ---
function query_clickhouse($query) {
    $url = 'http://127.0.0.1:8123/';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $query . " FORMAT JSON");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true);
}

// --- FILTERS ---
$search_date = $_REQUEST['date'] ?? date('Y-m-d');
$search_user = trim($_REQUEST['user'] ?? '');
$search_ip   = trim($_REQUEST['ip'] ?? '');
$search_src_port = trim($_REQUEST['src_port'] ?? '');
$search_dst_port = trim($_REQUEST['dst_port'] ?? '');
// Limit Handling (Default 100)
$search_limit = isset($_REQUEST['limit']) ? (int)$_REQUEST['limit'] : 100;
if (!in_array($search_limit, [50, 100, 200, 500, 1000, 5000])) $search_limit = 100;

// --- BUILD QUERY ---
$where = ["log_date = '$search_date'"];

if (!empty($search_user)) $where[] = "user ILIKE '%$search_user%'"; // Case insensitive
if (!empty($search_ip))   $where[] = "(src_ip = '$search_ip' OR dst_ip = '$search_ip')";
if (!empty($search_src_port)) $where[] = "src_port = $search_src_port";
if (!empty($search_dst_port)) $where[] = "dst_port = $search_dst_port";

$where_sql = implode(' AND ', $where);
$limit_sql = isset($_POST['export_csv']) ? "LIMIT 100000" : "LIMIT $search_limit";

$sql = "SELECT * FROM nat_logs.records WHERE $where_sql ORDER BY log_time DESC $limit_sql";

// --- EXECUTE ---
$data = [];
if (isset($_REQUEST['search']) || isset($_POST['export_csv'])) {
    $result = query_clickhouse($sql);
    if (isset($result['data'])) {
        $data = $result['data'];
    }
}

// --- EXPORT ---
if (isset($_POST['export_csv'])) {
    header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="nat_logs_'.$search_date.'.csv"');
    $output = fopen('php://output', 'w'); fputcsv($output, ['Date', 'Time', 'Router', 'User', 'Proto', 'Src IP', 'Src Port', 'Dst IP', 'Dst Port']);
    foreach ($data as $row) {
        fputcsv($output, [$row['log_date'], $row['log_time'], $row['router'], $row['user'], $row['proto'], $row['src_ip'], $row['src_port'], $row['dst_ip'], $row['dst_port']]);
    }
    fclose($output); exit;
}

require 'header.php';
?>

<div class="container-fluid mt-4">
    <div class="card shadow-sm border-0">
        <div class="card-header bg-dark text-white d-flex justify-content-between align-items-center">
            <h5 class="mb-0"><i class="fas fa-bolt me-2"></i>NAT Logs (ClickHouse DB)</h5>
            <span class="badge bg-success">Super Fast</span>
        </div>
        <div class="card-body bg-light">
            <form method="POST" class="row g-2 align-items-end">
                <div class="col-md-2">
                    <label class="form-label small fw-bold mb-0">Date</label>
                    <input type="date" name="date" class="form-control form-control-sm" value="<?php echo $search_date; ?>">
                </div>
                <div class="col-md-2">
                    <label class="form-label small fw-bold mb-0">User</label>
                    <input type="text" name="user" class="form-control form-control-sm" value="<?php echo htmlspecialchars($search_user); ?>" placeholder="Search User">
                </div>
                <div class="col-md-2">
                    <label class="form-label small fw-bold mb-0">IP Address</label>
                    <input type="text" name="ip" class="form-control form-control-sm" value="<?php echo htmlspecialchars($search_ip); ?>" placeholder="IP Address">
                </div>
                <div class="col-md-2">
                    <label class="form-label small fw-bold mb-0">Ports (Src / Dst)</label>
                    <div class="input-group input-group-sm">
                        <input type="text" name="src_port" class="form-control" value="<?php echo htmlspecialchars($search_src_port); ?>" placeholder="Src">
                        <input type="text" name="dst_port" class="form-control" value="<?php echo htmlspecialchars($search_dst_port); ?>" placeholder="Dst">
                    </div>
                </div>
                
                <div class="col-md-2">
                    <label class="form-label small fw-bold mb-0">Rows</label>
                    <select name="limit" class="form-select form-select-sm fw-bold">
                        <option value="50" <?php if($search_limit == 50) echo 'selected'; ?>>Show 50</option>
                        <option value="100" <?php if($search_limit == 100) echo 'selected'; ?>>Show 100</option>
                        <option value="200" <?php if($search_limit == 200) echo 'selected'; ?>>Show 200</option>
                        <option value="500" <?php if($search_limit == 500) echo 'selected'; ?>>Show 500</option>
                        <option value="1000" <?php if($search_limit == 1000) echo 'selected'; ?>>Show 1000</option>
                        <option value="5000" <?php if($search_limit == 5000) echo 'selected'; ?>>Show 5000</option>
                    </select>
                </div>

                <div class="col-md-2 d-flex gap-2">
                    <button type="submit" name="search" class="btn btn-primary btn-sm w-100 fw-bold"><i class="fas fa-search me-1"></i> Search</button>
                    <button type="submit" name="export_csv" class="btn btn-success btn-sm" title="Export CSV"><i class="fas fa-download"></i></button>
                </div>
            </form>
        </div>
    </div>

    <?php if(!empty($data)): ?>
    <div class="card mt-3 shadow-sm">
        <div class="card-header bg-white border-bottom fw-bold d-flex justify-content-between">
            <span>Found <?php echo count($data); ?> Records (Latest First)</span>
            <small class="text-muted">Database: ClickHouse</small>
        </div>
        <div class="table-responsive">
            <table class="table table-sm table-hover mb-0" style="font-size: 12px;">
                <thead class="table-dark">
                    <tr>
                        <th>Time</th>
                        <th>Router</th>
                        <th>User</th>
                        <th>Proto</th>
                        <th>Src IP</th>
                        <th>Port</th>
                        <th>Dst IP</th>
                        <th>Port</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach($data as $row): ?>
                    <tr>
                        <td><?php echo date('H:i:s', strtotime($row['log_time'])); ?></td>
                        <td><?php echo $row['router']; ?></td>
                        <td class="fw-bold text-primary"><?php echo $row['user']; ?></td>
                        <td><span class="badge bg-secondary" style="font-size:10px;"><?php echo $row['proto']; ?></span></td>
                        <td class="font-monospace"><?php echo $row['src_ip']; ?></td>
                        <td class="text-muted small"><?php echo $row['src_port']; ?></td>
                        <td class="font-monospace text-danger"><?php echo $row['dst_ip']; ?></td>
                        <td class="text-muted small"><?php echo $row['dst_port']; ?></td>
                    </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>
    <?php endif; ?>
</div>
<?php require 'footer.php'; ?>