import 'package:get/get.dart'; import 'package:intaleq_maps/intaleq_maps.dart'; import '../models/military_operations_models.dart'; import '../services/hlz_assessment_engine.dart'; /// ============================================================================ /// [HlzController] - وحدة التحكم بتقييم مهابط الطيران العامودي /// ============================================================================ /// English: /// GetX Controller managing Helicopter Landing Zone (HLZ) parameters, terrain /// slope gradient calculations, approach corridor clearances, and suitability scoring. /// /// العربية: /// متحكم GetX لإدارة تقييم مهابط المروحيات العسكرية، فحص نسبة انحدار الأرض، /// سلامة ممرات الاقتراب والإقلاع، وتحديد درجة صلاحية المهبط تكتيكياً. /// ============================================================================ class HlzController extends GetxController { // ── Observables / الحالات التفاعلية ────────────────────────────────────── final Rx selectedPosition = Rx(null); final Rx helicopterType = Rx(HelicopterType.mediumLift); final RxDouble approachAzimuthDeg = 0.0.obs; final RxBool isLoading = false.obs; final Rx assessmentResult = Rx(null); /// Set Landing Pad Center Location / تعيين موقع مركز المهبط المقترح void setPosition(LatLng pos) { selectedPosition.value = pos; assessLandingZone(); } /// Select Helicopter Airframe Type / تحديد فئة الطوافة (خفيفة / متوسطة / ثقيلة) void setHelicopterType(HelicopterType type) { helicopterType.value = type; assessLandingZone(); } /// Set Approach Corridor Azimuth / تحديد سمت ممر الاقتراب void setApproachAzimuth(double azimuthDeg) { approachAzimuthDeg.value = azimuthDeg; assessLandingZone(); } /// Run Full HLZ Assessment / تنفيذ التقييم الميداني الشامل للمهبط Future assessLandingZone() async { if (selectedPosition.value == null) { assessmentResult.value = null; return; } try { isLoading.value = true; final res = await HlzAssessmentEngine.assessLandingZone( center: selectedPosition.value!, helicopterType: helicopterType.value, approachAzimuthDeg: approachAzimuthDeg.value, ); assessmentResult.value = res; } catch (e) { assessmentResult.value = null; } finally { isLoading.value = false; } } /// Reset HLZ state / إعادة ضبط المهبط void reset() { selectedPosition.value = null; assessmentResult.value = null; approachAzimuthDeg.value = 0.0; } }