#![cfg(feature = "simulation")]
use bistun_core::{Direction, SdkState, SegType, TraitKey, TraitValue};
use bistun_lms::LinguisticManager;
use bistun_lms::data::repository::SimulatedSnapshotProvider;
#[tokio::test]
async fn test_full_pipeline_resolution() {
let manager = LinguisticManager::new();
let provider = SimulatedSnapshotProvider::new();
manager.initialize(&provider, &provider.public_key).await;
assert_eq!(manager.status(), SdkState::Ready);
let thai = manager.resolve_capabilities("th-TH").expect("LMS-TEST: Failed to resolve th-TH");
assert_eq!(thai.resolved_locale, "th-TH");
assert_eq!(
thai.traits.get(&TraitKey::SegmentationStrategy),
Some(&TraitValue::SegType(SegType::DICTIONARY))
);
assert!(thai.rules.contains_key("TRANSLITERATION_DEFAULT"));
assert!(thai.resources.contains_key("icu_thai"));
let arabic = manager
.resolve_capabilities("ar-EG-u-nu-latn")
.expect("LMS-TEST: Failed to resolve ar-EG-u-nu-latn");
assert_eq!(arabic.resolved_locale, "ar-EG");
assert_eq!(
arabic.traits.get(&TraitKey::PrimaryDirection),
Some(&TraitValue::Direction(Direction::RTL))
);
assert_eq!(arabic.extensions.get("nu"), Some(&"latn".to_string()));
let indonesian = manager.resolve_capabilities("in").expect("LMS-TEST: Failed to resolve in");
assert_eq!(indonesian.resolved_locale, "id");
let unknown = manager
.resolve_capabilities("xx-YY-u-nu-foo")
.expect("LMS-TEST: Failed to resolve fallback");
assert_eq!(unknown.resolved_locale, "en-US");
assert!(unknown.metadata.contains_key("resolution_time_ms"));
assert!(unknown.metadata.contains_key("resolution_path"));
assert!(unknown.metadata.contains_key("registry_version"));
}