use crate::error::Result;
use colored::*;
use std::process::Command;
pub fn create_repository(project_name: &str, is_public: bool) -> Result<String> {
let visibility = if is_public { "public" } else { "private" };
println!(
"{}",
format!("Creating {} GitHub repository...", visibility).yellow()
);
let output = Command::new("gh")
.args([
"repo",
"create",
project_name,
&format!("--{}", visibility),
"--source=.",
"--remote=origin",
])
.output()?;
if !output.status.success() {
let error = String::from_utf8_lossy(&output.stderr);
return Err(anyhow::anyhow!("Failed to create GitHub repository: {}", error));
}
println!("{}", "✓ Created GitHub repository".green());
let url = String::from_utf8_lossy(&output.stdout);
Ok(url.trim().to_string())
}
pub fn is_gh_cli_installed() -> bool {
Command::new("gh")
.arg("--version")
.output()
.map(|output| output.status.success())
.unwrap_or(false)
}
pub fn is_gh_cli_authenticated() -> bool {
Command::new("gh")
.args(["auth", "status"])
.output()
.map(|output| output.status.success())
.unwrap_or(false)
}