package com.ttstd.controlled.utils;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.provider.Settings;

import java.util.UUID;

/**
 * 设备唯一标识工具。
 *
 * 安全改造后，被控端以出厂 SN 作为激活身份（provision 用），不再由用户随意填写设备 ID。
 * 优先读取系统序列号/硬件序列号；非系统签名应用可能拿不到，则回退到稳定的 Android ID。
 */
public class DeviceUtils {

    @SuppressLint("HardwareIds")
    public static String getSerial() {
        String serial = "";
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                serial = Build.getSerial();
            } else {
                serial = Build.SERIAL;
            }
        } catch (SecurityException e) {
            // 无 READ_PHONE_STATE 或系统签名权限时拿不到，回退到未知。
            serial = "";
        }
        if (serial == null || serial.isEmpty() || "unknown".equalsIgnoreCase(serial)) {
            return "";
        }
        return serial;
    }

    /** 稳定的设备标识（优先 SN，否则 Android ID）。用于激活 SN 字段与日志。 */
    @SuppressLint("HardwareIds")
    public static String getStableId(Context context) {
        String sn = getSerial();
        if (!sn.isEmpty()) return sn;
        return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
    }

    public static String generateRandomDeviceId() {
        return "web-" + UUID.randomUUID().toString().substring(0, 8);
    }
}
