import 'dart:io';

import 'package:flashlink/pigeons/core_api.g.dart' as pigeon;

import 'mobile_core_api.dart';
import 'windows_core_api.dart';

// 导出子类供外部使用
export 'mobile_core_api.dart';
export 'windows_core_api.dart';

/// 导出 onEventChange 函数供外部使用
Stream<String> onEventChange({String instanceName = ''}) {
  if (Platform.isWindows) {
    // Windows 使用自定义实现
    return WindowsCoreApi.eventStream;
  }
  // Android/iOS 使用 Pigeon 实现
  return pigeon.onEventChange(instanceName: instanceName);
}

/// 核心 API 抽象基类
/// Android/iOS 使用 Pigeon 实现，Windows 使用自定义实现
abstract class BaseCoreApi {
  static BaseCoreApi? _instance;

  /// 工厂方法，单例模式，根据平台返回对应实现
  factory BaseCoreApi() {
    _instance ??= Platform.isWindows
        ? WindowsCoreApi.create()
        : MobileCoreApi.create();
    return _instance!;
  }

  /// 获取应用列表
  Future<String?> getApps();

  /// 获取系统语言
  Future<String?> getSystemLocale();

  /// 连接
  Future<bool?> connect(
    String sessionId,
    int socksPort,
    String tunnelConfig,
    String configJson,
    int remainTime,
    bool isCountdown,
    List<String> allowVpnApps,
    List<String> disallowVpnApps,
    String accessToken,
    String aesKey,
    String aesIv,
    int locationId,
    String locationCode,
    List<String> baseUrls,
    String params,
    int peekTimeInterval,
  );

  /// 断开连接
  Future<bool?> disconnect();

  /// 获取远程 IP
  Future<String?> getRemoteIp();

  /// 获取广告 ID
  Future<String?> getAdvertisingId();

  /// 将任务移至后台
  Future<bool?> moveTaskToBack();

  /// 是否已连接
  Future<bool?> isConnected();

  /// 获取 SIM 卡信息
  Future<String?> getSimInfo();

  /// 获取渠道
  Future<String?> getChannel();

  /// 打开应用
  Future<void> openPackage(String packageName);
}
