use std::env;
use std::fs;
use std::process::Command;

pub fn get_prompt() -> String {
    let c_rocky = "\x1b[1;38;2;0;168;107m";
    let c_amber = "\x1b[1;38;5;214m";
    let c_ciq_blue = "\x1b[1;38;2;42;115;212m";
    let c_path = "\x1b[1;38;5;75m";
    let c_reset = "\x1b[0m";
    let c_bold = "\x1b[1m";

    let user = env::var("USER").unwrap_or_else(|_| "user".to_string());

    let host = fs::read_to_string("/proc/sys/kernel/hostname")
        .unwrap_or_else(|_| "host\n".to_string())
        .trim()
        .to_string();

    let mut cwd = env::current_dir().unwrap_or_default().display().to_string();
    if let Ok(home) = env::var("HOME")
        && cwd.starts_with(&home)
    {
        cwd = cwd.replacen(&home, "~", 1);
    }

    let mut git_info = String::new();
    if let Ok(out) = Command::new("git")
        .arg("branch")
        .arg("--show-current")
        .output()
        && out.status.success()
    {
        let branch = String::from_utf8_lossy(&out.stdout).trim().to_string();
        if !branch.is_empty() {
            git_info = format!(" ({}{}{})", c_ciq_blue, branch, c_rocky);
        }
    }

    format!(
        "\r\n{}╭─ {} {}{}@{}{}{} : {} {} {}{}\r\n{}╰─λ {}{}",
        c_amber,
        c_rocky,
        user,
        c_amber,
        c_rocky,
        host,
        c_amber,
        c_path,
        cwd,
        c_rocky,
        git_info,
        c_amber,
        c_reset,
        c_bold
    )
}
