use agent_contracts::runtime::runtime_view::RuntimeView;
use std::path::{Path, PathBuf};

#[allow(dead_code)]
pub fn runtime_workspace_root(runtime: &dyn RuntimeView) -> &Path {
    runtime.agent_context().workspace().root.as_path()
}

#[allow(dead_code)]
pub fn expand_path_from_base(path: &str, base_dir: &Path) -> String {
    let path = path.trim();

    if path == "~" {
        if let Ok(home) = std::env::var("HOME") {
            return home;
        }
    }

    if path.starts_with("~/") {
        if let Ok(home) = std::env::var("HOME") {
            return format!("{}{}", home, &path[1..]);
        }
    }

    let candidate = PathBuf::from(path);
    if candidate.is_relative() {
        return base_dir.join(candidate).to_string_lossy().into_owned();
    }

    path.to_string()
}

#[cfg(test)]
mod tests {
    use super::expand_path_from_base;
    use std::path::Path;

    #[test]
    fn expands_relative_paths_from_workspace_root() {
        let expanded = expand_path_from_base("src/main.rs", Path::new("/tmp/workspace"));
        assert_eq!(expanded, "/tmp/workspace/src/main.rs");
    }

    #[test]
    fn keeps_absolute_paths_unchanged() {
        let expanded = expand_path_from_base("/tmp/workspace/src/main.rs", Path::new("/ignored"));
        assert_eq!(expanded, "/tmp/workspace/src/main.rs");
    }
}