use crate::storage::store::Store;

#[derive(Debug, Clone, Copy)]
pub enum QuarantineMode {
    Off,
    Warn,
    Strict,
}

impl QuarantineMode {
    pub fn parse(s: &str) -> Self {
        match s {
            "off" => Self::Off,
            "strict" => Self::Strict,
            _ => Self::Warn,
        }
    }
}

#[derive(Clone)]
pub struct QuarantineService {
    store: Store,
}

impl QuarantineService {
    pub fn new(store: Store) -> Self {
        Self { store }
    }

    pub fn is_quarantined(&self, suite: &str, test_id: &str) -> anyhow::Result<Option<String>> {
        self.store.quarantine_get_reason(suite, test_id)
    }

    pub fn add(&self, suite: &str, test_id: &str, reason: &str) -> anyhow::Result<()> {
        self.store.quarantine_add(suite, test_id, reason)
    }

    pub fn remove(&self, suite: &str, test_id: &str) -> anyhow::Result<()> {
        self.store.quarantine_remove(suite, test_id)
    }
}
