rush_sync_server/commands/lang/
config.rs

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