use crate::supports::enums;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
//por padrão o rust acha redundante usar o mesmo prefixo em todas as variantes do enum. Porém nesse caso é intencional
//pois quem estiver usando a lib poderá definir a env como o prefixo do nome da var e deixar a configurável clara.
#[allow(clippy::enum_variant_names)]
pub enum EnvironmentVariables {
    KondutoApiKey,
    KondutoUrl,
    KondutoHttpMaxRetries,

    // Variáveis de ambiente para StatsD (disponíveis apenas com a feature 'statsd')
    #[cfg(feature = "statsd")]
    KondutoStatsdHost,
    #[cfg(feature = "statsd")]
    KondutoStatsdPort,
    #[cfg(feature = "statsd")]
    KondutoStatsdMaxBufferSize,
    #[cfg(feature = "statsd")]
    KondutoStatsdMaxTimeMs,
    #[cfg(feature = "statsd")]
    KondutoStatsdTags,
}

impl EnvironmentVariables {
    pub fn as_str(&self) -> String {
        enums::to_string_infallible(self)
    }
}
