zoi-cli 1.24.4

Advanced Package Manager & Environment Orchestrator
Documentation
use anyhow::Result;
use colored::*;

pub enum TelemetryCommand {
    Status,
    Enable,
    Disable,
}

pub fn run(cmd: TelemetryCommand) -> Result<()> {
    match cmd {
        TelemetryCommand::Status => {
            let cfg = crate::pkg::config::read_config()?;
            let status = if cfg.telemetry_enabled {
                "Enabled".green()
            } else {
                "Disabled".yellow()
            };
            println!("{} telemetry is currently {}.", "::".bold().blue(), status);

            if cfg.telemetry_enabled {
                let id = crate::pkg::telemetry::get_anonymous_id();
                println!("Anonymous Client ID: {}", id.cyan());
                println!(
                    "\nThank you for helping us improve Zoi! We collect minimal, anonymous data about:"
                );
                println!("- {} (OS, Arch, Distro, Shell)", "Environment".bold());
                println!("- {} (Action, Scope, Reason)", "Operations".bold());
                println!(
                    "- {} (Name, Version, Repo, License)",
                    "Package Metadata".bold()
                );
            } else {
                println!(
                    "\nTelemetry is anonymous and helps us prioritize features and platforms."
                );
                println!("Run 'zoi telemetry enable' to help the project.");
            }
        }
        TelemetryCommand::Enable => {
            let mut cfg = crate::pkg::config::read_user_config()?;

            println!(
                "{}",
                "Notice: Enabling telemetry shares anonymous usage data to help improve Zoi."
                    .dimmed()
            );
            println!(
                "{}",
                "No personal data or IP addresses are ever collected.".dimmed()
            );
            println!(
                "{} {}",
                "Full Privacy Policy:".dimmed(),
                "https://zillowe.qzz.io/legal/privacy".cyan()
            );

            cfg.telemetry_enabled = true;
            crate::pkg::config::write_user_config(&cfg)?;
            println!("{} telemetry enabled", "Success:".green());
        }
        TelemetryCommand::Disable => {
            let mut cfg = crate::pkg::config::read_user_config()?;
            cfg.telemetry_enabled = false;
            crate::pkg::config::write_user_config(&cfg)?;
            println!("{} telemetry disabled", "Success:".green());
        }
    }
    Ok(())
}