use crate::impl_nutype_error_conversion;
use nutype::nutype;

/// Idioma do dispositivo (mínimo 2, máximo 225 caracteres)
///
/// # Validações
/// - Não pode ser vazio (após trim)
/// - Mínimo 2 caracteres
/// - Máximo 225 caracteres
///
/// # Exemplos
/// ```
/// use konduto::language::DeviceLanguage;
///
/// let language = DeviceLanguage::try_new("pt-BR").unwrap();
/// assert_eq!(language.as_str(), "pt-BR");
/// ```
#[nutype(
    sanitize(trim),
    validate(not_empty, len_char_min = 2, len_char_max = 225),
    derive(
        Debug,
        Clone,
        PartialEq,
        Eq,
        Display,
        AsRef,
        Deref,
        Serialize,
        Deserialize,
    )
)]
pub struct DeviceLanguage(String);

impl DeviceLanguage {
    /// Retorna o idioma como string slice (compatibilidade)
    pub fn as_str(&self) -> &str {
        self.as_ref()
    }
}

impl_nutype_error_conversion!(DeviceLanguageError);
