<?php
// 임시 차단된 사용자 자동 해제 처리 함수
function processTemporaryBlocks() {
    $temp_blocks_file = __DIR__ . "/vpn_temp_blocks.json";
    $current_time = time();

    if (!file_exists($temp_blocks_file)) {
        return array(); // 파일이 없으면 빈 배열 반환
    }

    $blocks_content = file_get_contents($temp_blocks_file);
    $blocks_data = json_decode($blocks_content, true);

    if (!$blocks_data) {
        return array(); // JSON 파싱 실패 시 빈 배열 반환
    }

    $updated = false;
    $unblocked_users = array();

    foreach ($blocks_data as $user_id => $block_info) {
        if (!isset($block_info['blocked_until'])) continue;

        // 차단 해제 시간 확인
        $blocked_until_time = strtotime($block_info['blocked_until']);

        if ($current_time >= $blocked_until_time) {
            // 차단 시간이 지났으므로 해제
            $unblocked_users[] = $user_id;
            unset($blocks_data[$user_id]);
            $updated = true;

            // ipsec.secrets에서 해당 사용자 활성화 (주석 제거)
            enableUserInIpsecSecrets($user_id);
        }
    }

    // 변경사항이 있으면 파일 업데이트
    if ($updated) {
        if (empty($blocks_data)) {
            // 모든 차단이 해제되면 파일 삭제
            unlink($temp_blocks_file);
        } else {
            // 남은 차단 정보로 파일 업데이트
            file_put_contents($temp_blocks_file, json_encode($blocks_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
        }
    }

    return $unblocked_users;
}

// ipsec.secrets에서 사용자 활성화 함수
function enableUserInIpsecSecrets($user_id) {
    $secrets_file_path = "/etc/strongswan/ipsec.secrets";

    if (!file_exists($secrets_file_path)) {
        return false;
    }

    $lines = file($secrets_file_path, FILE_IGNORE_NEW_LINES);
    $updated = false;

    for ($i = 0; $i < count($lines); $i++) {
        $line = trim($lines[$i]);

        // 주석처리된 라인에서 해당 사용자 찾기
        if (substr($line, 0, 1) === '#' && strpos($line, $user_id . ' : EAP ') !== false) {
            // 주석 제거하여 활성화
            $lines[$i] = substr($line, 1); // 첫 번째 # 제거
            $updated = true;
            break;
        }
    }

    if ($updated) {
        $file_content = implode("\n", $lines) . "\n";
        file_put_contents($secrets_file_path, $file_content);

        // strongSwan 설정 다시 로드
        exec("/bin/php_my_root /usr/sbin/strongswan rereadsecrets");

        return true;
    }

    return false;
}

// 임시 차단된 사용자 목록 가져오기 함수
function getTemporaryBlocks() {
    $temp_blocks_file = __DIR__ . "/vpn_temp_blocks.json";

    if (!file_exists($temp_blocks_file)) {
        return array();
    }

    $blocks_content = file_get_contents($temp_blocks_file);
    $blocks_data = json_decode($blocks_content, true);

    return $blocks_data ? $blocks_data : array();
}

// 페이지 로드 시 자동으로 임시 차단 해제 처리
$unblocked_users = processTemporaryBlocks();
$temp_blocks = getTemporaryBlocks();

// 자동 해제된 사용자가 있으면 알림 표시
if (!empty($unblocked_users)) {
    echo "<div style='background-color: #d4edda; border: 1px solid #c3e6cb; color: #155724; padding: 10px; margin-bottom: 15px; border-radius: 5px;'>";
    echo "<strong>자동 해제 완료:</strong> ";
    echo "다음 사용자들의 임시 차단이 자동으로 해제되었습니다: " . implode(", ", array_map('htmlspecialchars', $unblocked_users));
    echo "</div>";
}

// 현재 임시 차단된 사용자 표시
if (!empty($temp_blocks)) {
    echo "<div style='background-color: #fff3cd; border: 1px solid #ffeaa7; color: #856404; padding: 10px; margin-bottom: 15px; border-radius: 5px;'>";
    echo "<strong>현재 임시 차단된 사용자:</strong><br>";
    foreach ($temp_blocks as $user_id => $block_info) {
        $remaining_seconds = strtotime($block_info['blocked_until']) - time();
        $remaining_time = max(0, $remaining_seconds);
        $remaining_display = gmdate("H:i:s", $remaining_time);

        echo "• <strong>" . htmlspecialchars($user_id) . "</strong> - ";
        echo "남은 시간: " . $remaining_display;
        echo " (해제 예정: " . htmlspecialchars($block_info['blocked_until']) . ")<br>";
    }
    echo "</div>";
}
?>