use anyhow::Result;
use owo_colors::OwoColorize;
use crate::api::client::ApiClient;
use crate::output::Format;
use crate::render::sanitise;
use crate::render::table::{Cell, Table};
use crate::render::theme;
use crate::render::time;
pub async fn run(
client: &ApiClient,
project_reference: &str,
switch: Option<bool>,
format: Format,
) -> Result<()> {
let project = client.find_project(project_reference).await?;
let answer = match switch {
Some(enabled) => client.set_previews(&project.id, enabled).await?,
None => client.previews(&project.id).await?,
};
if format.answered_in_json(&answer.raw) {
return Ok(());
}
let status = &answer.body;
if status.enabled {
println!(
" {} Cada pull request de un repositorio de {} tiene su entorno pr-<nĂºmero>.",
theme::CHECK.style(theme::success()),
sanitise::plain(&project.name).style(theme::strong())
);
} else {
println!(
" {}",
format!(
"Los pull requests de {} no tienen entorno. fundaia previews {} on",
sanitise::plain(&project.name),
project.slug
)
.style(theme::muted())
);
}
if status.previews.is_empty() {
return Ok(());
}
println!();
let mut table = Table::new(&["entorno", "pull request", "rama", "creado"]);
for preview in &status.previews {
table.push(vec![
Cell::styled(sanitise::plain(&preview.environment.slug), theme::strong()),
Cell::plain(format!(
"#{} {}",
preview.number,
sanitise::plain(&preview.title)
)),
Cell::styled(sanitise::plain(&preview.branch), theme::muted()),
Cell::styled(time::when(&preview.created_at), theme::muted()),
]);
}
table.print_or("");
Ok(())
}