import 'dart:io';
import 'package:flutter_tts/flutter_tts.dart';
import 'package:get/get.dart';
import 'package:siro_driver/constant/box_name.dart';
import 'package:siro_driver/main.dart';

class TextToSpeechController extends GetxController {
  final FlutterTts flutterTts = FlutterTts();
  bool isSpeaking = false;

  @override
  void onInit() {
    super.onInit();
    initTts();
  }

  @override
  void onClose() {
    flutterTts.stop();
    super.onClose();
  }

  // --- 1. تهيئة المحرك بإعدادات قوية للملاحة ---
  Future<void> initTts() async {
    try {
      // جلب اللغة المحفوظة أو استخدام العربية كافتراضي
      String lang = box.read(BoxName.lang) ?? 'ar-SA';

      // تصحيح صيغة اللغة إذا لزم الأمر
      if (lang == 'ar') lang = 'ar-SA';
      if (lang == 'en') lang = 'en-US';

      await flutterTts.setLanguage(lang);
      await flutterTts.setSpeechRate(0.5); // سرعة متوسطة وواضحة
      await flutterTts.setVolume(1.0);
      await flutterTts.setPitch(1.0);

      // إعدادات خاصة لضمان عمل الصوت مع الملاحة (خاصة للآيفون)
      if (Platform.isIOS) {
        await flutterTts
            .setIosAudioCategory(IosTextToSpeechAudioCategory.playback, [
          IosTextToSpeechAudioCategoryOptions.mixWithOthers,
          IosTextToSpeechAudioCategoryOptions.duckOthers
        ]);
      }

      // الاستماع لحالة الانتهاء
      flutterTts.setCompletionHandler(() {
        isSpeaking = false;
        update();
      });

      flutterTts.setStartHandler(() {
        isSpeaking = true;
        update();
      });
    } catch (e) {
      print("TTS Init Error: $e");
    }
  }

  // --- 2. دالة التحدث (تقاطع الكلام القديم) ---
  Future<void> speakText(String text) async {
    if (text.isEmpty) return;

    try {
      // إيقاف أي كلام حالي لضمان نطق التوجيه الجديد فوراً (أهم للملاحة)
      await flutterTts.stop();

      var result = await flutterTts.speak(text);
      if (result == 1) {
        isSpeaking = true;
        update();
      }
    } catch (error) {
      // لا تعرض سناك بار هنا لتجنب إزعاج السائق أثناء القيادة
      print('Failed to speak text: $error');
    }
  }

  // --- 3. دالة الإيقاف (ضرورية لزر الكتم) ---
  Future<void> stop() async {
    try {
      var result = await flutterTts.stop();
      if (result == 1) {
        isSpeaking = false;
        update();
      }
    } catch (e) {
      print("Error stopping TTS: $e");
    }
  }
}
