import 'dart:io';
import 'package:flutter/foundation.dart';
import '../network/api_client.dart';

/// FCM 推送服务框架
/// Firebase 配置文件后续再添加，当前用 try-catch 保护初始化
class PushService {
  static final PushService _instance = PushService._();
  factory PushService() => _instance;
  PushService._();

  bool _initialized = false;
  String? _fcmToken;

  String? get fcmToken => _fcmToken;
  bool get isInitialized => _initialized;

  /// 初始化推送服务
  /// 无 Firebase 配置文件时静默失败，不影响 app 启动
  Future<void> initialize() async {
    try {
      // 动态导入 firebase，避免无配置文件时编译错误
      // Firebase 初始化需要 google-services.json / GoogleService-Info.plist
      // 配置文件准备好后取消下方注释：
      //
      // await Firebase.initializeApp();
      // final messaging = FirebaseMessaging.instance;
      //
      // // 请求通知权限 (iOS + Android 13+)
      // await messaging.requestPermission(
      //   alert: true,
      //   badge: true,
      //   sound: true,
      // );
      //
      // // 获取 FCM token
      // _fcmToken = await messaging.getToken();
      // if (_fcmToken != null) {
      //   debugPrint('[PushService] FCM Token: $_fcmToken');
      //   await _registerToken(_fcmToken!);
      // }
      //
      // // 监听 token 刷新
      // messaging.onTokenRefresh.listen((token) {
      //   _fcmToken = token;
      //   _registerToken(token);
      // });
      //
      // // 前台消息处理
      // FirebaseMessaging.onMessage.listen(_handleForegroundMessage);
      //
      // // 后台消息点击处理
      // FirebaseMessaging.onMessageOpenedApp.listen(_handleMessageTap);

      _initialized = true;
      debugPrint('[PushService] 推送服务框架已初始化（等待 Firebase 配置）');
    } catch (e) {
      debugPrint('[PushService] 初始化失败（可能缺少 Firebase 配置文件）: $e');
    }
  }

  /// 注册设备 token 到后端
  Future<void> _registerToken(String token) async {
    try {
      final platform = Platform.isIOS ? 'IOS' : 'ANDROID';
      await ApiClient.instance.post('/device-tokens', data: {
        'platform': platform,
        'channel': 'FCM',
        'token': token,
      });
      debugPrint('[PushService] Token 注册成功');
    } catch (e) {
      debugPrint('[PushService] Token 注册失败: $e');
    }
  }

  /// 注销设备 token
  Future<void> unregisterToken() async {
    if (_fcmToken == null) return;
    try {
      await ApiClient.instance.delete('/device-tokens', data: {
        'token': _fcmToken,
      });
      debugPrint('[PushService] Token 已注销');
    } catch (e) {
      debugPrint('[PushService] Token 注销失败: $e');
    }
  }
}
