import 'dart:io';

import 'package:android_id/android_id.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:uuid/uuid.dart';

/// 设备信息工具类（控制端，非系统签名应用）
///
/// 与 WebRTCControlled 的 DeviceUtils 对应，但控制端没有系统签名，
/// 因此无法稳定获取真实的硬件序列号，这里采用「不要求准确」的兜底方案：
/// 1. 优先使用官方插件（[DeviceInfoPlugin]）提供的 serialNumber；
/// 2. 如果 serialNumber 为 unknown，则尝试获取 Android ID；
/// 3. 失败则使用 iOS 的 identifierForVendor；
/// 4. 再失败则生成随机 UUID。
class DeviceUtils {
  DeviceUtils._();

  /// 获取设备标识（适用于普通应用）。
  ///
  /// 兼容各平台：Android 优先使用官方序列号，其次使用 Android ID，
  /// iOS 使用 identifierForVendor，均不可用时回退到随机 UUID。
  static Future<String> getSerialNumber() async {
    const uuid = Uuid();
    try {
      final deviceInfo = DeviceInfoPlugin();
      if (Platform.isAndroid) {
        final androidInfo = await deviceInfo.androidInfo;
        final serial = androidInfo.serialNumber;
        if (serial.isNotEmpty && serial.toLowerCase() != 'unknown') {
          return serial;
        }

        // 如果 serialNumber 获取失败，尝试获取 Android ID
        const androidIdPlugin = AndroidId();
        final androidId = await androidIdPlugin.getId();
        if (androidId != null && androidId.isNotEmpty) {
          return androidId;
        }
      } else if (Platform.isIOS) {
        final iosInfo = await deviceInfo.iosInfo;
        final id = iosInfo.identifierForVendor;
        if (id != null && id.isNotEmpty) {
          return id;
        }
      }
    } catch (_) {
      // 获取失败，走兜底逻辑
    }
    return uuid.v4();
  }
}
