use crate::config::*;
use crate::network;
use windmark::response::Response;
pub fn handler(
cfg: &Config,
username: &str,
repo_name: &str,
) -> Result<Response, network::error::Error> {
let repo = &cfg.forge_api().get_repo(username, repo_name)?;
let kind = cfg.forge_kind.to_string();
let repo_http_url = &repo.html_url.0;
let repo_http = format!("\n\n=> {repo_http_url} View on {kind}");
let branches = &cfg.forge_api().get_branches(username, repo_name)?;
let branches_list: Vec<String> = branches
.iter()
.map(|b| super::templates::branch_link(&repo, &b))
.collect();
let gemtext_branches_list: String = branches_list
.iter()
.map(|b: &String| format!("{b}\n"))
.collect::<Vec<String>>()
.concat();
let contents = &cfg.forge_api().get_file_tree(username, repo_name)?;
let contents_list: Vec<String> = contents
.iter()
.map(|f| super::templates::file_link(&repo, None, &f))
.collect();
let gemtext_tree_list: String = contents_list
.iter()
.map(|f| format!("{f}\n"))
.collect::<Vec<String>>()
.concat();
let gemtext: String = format!("## {username}/{repo_name}\n=> /{username} {username}\n### Branches\n{gemtext_branches_list}\n### Tree\n{gemtext_tree_list}{repo_http}");
return Ok(Response::success(gemtext));
}