fundaia 0.53.0

Command line for the Fundaia deployment platform: projects, services, variables, deployments, logs and metrics
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(())
}