rush_sync_server/commands/lang/
config.rs

1// commands/lang/config.rs - CONFIG INTEGRATION
2use super::persistence::LanguagePersistence;
3use crate::core::config::Config;
4use crate::core::prelude::*;
5use crate::i18n::get_available_languages;
6
7/// Config-Integration für Language Management
8pub struct LanguageConfig;
9
10impl LanguageConfig {
11    /// Setzt Sprache in bestehender Config-Instanz
12    pub async fn set_in_config(config: &mut Config, lang: &str) -> Result<()> {
13        // ✅ 1. VALIDIERUNG
14        let lang_lower = lang.to_lowercase();
15        let available = get_available_languages();
16
17        if !available.iter().any(|l| l.to_lowercase() == lang_lower) {
18            return Err(AppError::Validation(format!(
19                "Ungültige Sprache: {}. Verfügbar: {:?}",
20                lang, available
21            )));
22        }
23
24        // ✅ 2. CONFIG AKTUALISIEREN
25        config.language = lang.to_lowercase();
26
27        // ✅ 3. CONFIG SPEICHERN
28        config.save().await?;
29
30        // ✅ 4. i18n AKTUALISIEREN
31        crate::i18n::set_language(lang)?;
32
33        log::debug!("Language set in config: {}", lang.to_uppercase());
34        Ok(())
35    }
36
37    /// Lädt Sprache aus Config und setzt i18n
38    pub async fn load_and_apply_from_config(config: &Config) -> Result<()> {
39        let lang = &config.language;
40
41        // ✅ SETZE i18n basierend auf Config
42        if let Err(e) = crate::i18n::set_language(lang) {
43            log::warn!(
44                "{}",
45                get_translation("system.config.language_set_failed", &[&e.to_string()])
46            );
47
48            // ✅ FALLBACK auf DEFAULT
49            let _ = crate::i18n::set_language(crate::i18n::DEFAULT_LANGUAGE);
50        }
51
52        Ok(())
53    }
54
55    /// Erstellt neue Config mit spezifischer Sprache
56    pub async fn create_config_with_language(lang: &str) -> Result<Config> {
57        let mut config = Config::default();
58        config.language = lang.to_lowercase();
59
60        // ✅ SOFORT SPEICHERN
61        config.save().await?;
62
63        Ok(config)
64    }
65
66    /// Synchronisiert Config-Datei mit aktueller i18n Sprache
67    pub async fn sync_config_with_current_language() -> Result<()> {
68        let current_lang = crate::i18n::get_current_language().to_lowercase();
69        LanguagePersistence::save_to_config(&current_lang).await
70    }
71
72    /// Prüft ob Config und i18n synchron sind
73    pub fn is_config_in_sync_with_i18n(config: &Config) -> bool {
74        let config_lang = config.language.to_lowercase();
75        let current_lang = crate::i18n::get_current_language().to_lowercase();
76        config_lang == current_lang
77    }
78
79    /// Repariert Config falls sie nicht mit i18n synchron ist
80    pub async fn repair_config_sync(config: &mut Config) -> Result<bool> {
81        if !Self::is_config_in_sync_with_i18n(config) {
82            let current_lang = crate::i18n::get_current_language().to_lowercase();
83            config.language = current_lang.clone();
84            config.save().await?;
85
86            log::debug!(
87                "Config language repaired to: {}",
88                current_lang.to_uppercase()
89            );
90            return Ok(true);
91        }
92        Ok(false)
93    }
94}