use crate::app_config::AppConfig;
use crate::constants;
use std::path::Path;

/// Check out whether NAT hook has been installed or not
pub fn is_installed() -> anyhow::Result<bool> {
    let hook_file = Path::new(constants::NAT_HOOK_PATH);

    if !hook_file.exists() {
        return Ok(false);
    }

    let exe = std::env::current_exe()?;
    let hook_content = std::fs::read_to_string(hook_file)?;

    Ok(hook_content.contains(exe.to_string_lossy().as_ref()))
}

/// Get nat hook expected content
pub fn hook_content() -> anyhow::Result<String> {
    let exe = std::env::current_exe()?;

    Ok(format!(
        "#!/bin/bash\n\
    NAT_MODE=1 {} --storage {} --network-name \"$1\" --operation \"$2\" --sub-operation \"$3\"",
        exe.to_string_lossy(),
        AppConfig::get().storage
    ))
}