import 'package:siro_rider/print.dart';
import 'dart:async';
import 'package:app_links/app_links.dart';
import 'package:get/get.dart';
import '../../main.dart';
import 'profile/invites_rewards_controller.dart';

class DeepLinkController extends GetxController {
  final _appLinks = AppLinks();
  StreamSubscription<Uri>? _linkSubscription;

  // تخزين الرابط الخام (URL) ليتم معالجته لاحقاً في MapPassengerController
  final Rx<String?> rawDeepLink = Rx<String?>(null);

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

  Future<void> initDeepLinks() async {
    // الاستماع للروابط والتطبيق يعمل في الخلفية
    _linkSubscription = _appLinks.uriLinkStream.listen((uri) {
      Log.print('🔗 Received deep link (Stream): $uri');
      rawDeepLink.value = uri.toString();
      _processInviteCode(uri);
    });

    // الاستماع للروابط إذا كان التطبيق مغلقاً تماماً (Cold Start)
    try {
      final initialUri = await _appLinks.getInitialLink();
      if (initialUri != null) {
        Log.print('🔗 Received initial deep link (Cold Start): $initialUri');
        rawDeepLink.value = initialUri.toString();
        _processInviteCode(initialUri);
      }
    } catch (e) {
      Log.print('Error getting initial link: $e');
    }
  }

  void _processInviteCode(Uri uri) {
    String? inviteCode = uri.queryParameters['code'] ??
                         uri.queryParameters['inviteCode'] ??
                         uri.queryParameters['ref'];
    if (inviteCode != null && inviteCode.isNotEmpty) {
      // دائماً نخزن الكود حتى لو لم يكن مسجلاً، ليتم استخدامه بعد التسجيل
      box.write('inviteCode', inviteCode);

      // إذا كان المستخدم مسجل دخول (يمتلك JWT)، نربط الدعوة فوراً
      if (box.read('jwt') != null) {
        try {
          var rewardsController = Get.find<InvitesRewardsController>();
          rewardsController.linkInviteCode(inviteCode);
        } catch (e) {
          var rewardsController = Get.put(InvitesRewardsController());
          rewardsController.linkInviteCode(inviteCode);
        }
      }
    }
  }

  @override
  void onClose() {
    _linkSubscription?.cancel();
    super.onClose();
  }
}
