flowrs-tui 0.1.15

Flowrs is a Terminal User Interface (TUI) for Apache Airflow
use std::path::PathBuf;

use inquire::Select;
use strum::IntoEnumIterator;

use super::model::ManagedServiceCommand;
use crate::airflow::config::FlowrsConfig;
use crate::airflow::config::ManagedService;
use anyhow::Result;

impl ManagedServiceCommand {
    pub fn run(&self) -> Result<()> {
        let managed_service = match self.managed_service.clone() {
            Some(managed_service) => managed_service,
            None => {
                let managed_service: ManagedService =
                    Select::new("managed service", ManagedService::iter().collect()).prompt()?;
                managed_service
            }
        };

        let path = self.file.as_ref().map(PathBuf::from);
        let mut config = FlowrsConfig::from_file(&path)?;

        match config.managed_services {
            Some(ref mut services) => {
                if services.contains(&managed_service) {
                    println!("Managed service already enabled!");
                    return Ok(());
                }
                services.push(managed_service);
            }
            None => {
                config.managed_services = Some(vec![managed_service]);
            }
        }

        config.write_to_file()?;

        println!("✅ Managed service added successfully!");
        Ok(())
    }

    pub fn disable(&self) -> Result<()> {
        let managed_service = match self.managed_service.clone() {
            Some(managed_service) => managed_service,
            None => {
                let managed_service: ManagedService =
                    Select::new("managed service", ManagedService::iter().collect()).prompt()?;
                managed_service
            }
        };

        let path = self.file.as_ref().map(PathBuf::from);
        let mut config = FlowrsConfig::from_file(&path)?;

        if let Some(ref mut services) = config.managed_services {
            if !services.contains(&managed_service) {
                println!("Managed service already disabled!");
                return Ok(());
            }
            services.retain(|service| service != &managed_service);
        }

        config.write_to_file()?;

        println!("✅ Managed service disabled successfully!");
        Ok(())
    }
}