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? _linkSubscription; // تخزين الرابط الخام (URL) ليتم معالجته لاحقاً في MapPassengerController final Rx rawDeepLink = Rx(null); @override void onInit() { super.onInit(); initDeepLinks(); } Future 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(); rewardsController.linkInviteCode(inviteCode); } catch (e) { var rewardsController = Get.put(InvitesRewardsController()); rewardsController.linkInviteCode(inviteCode); } } } } @override void onClose() { _linkSubscription?.cancel(); super.onClose(); } }