import { app } from 'electron';
import { machineIdSync } from 'node-machine-id';
import os from 'os';

import { getSharedStore } from './config';

const store = getSharedStore();

/**
 * 获取设备唯一标识符
 * 优先使用存储的ID，如果没有则获取机器ID并存储
 */
export function getDeviceId(): string {
  let deviceId = store.get('deviceId') as string | undefined;

  if (!deviceId) {
    try {
      // 使用node-machine-id获取设备唯一标识
      deviceId = machineIdSync(true);
    } catch (error) {
      console.error('获取机器ID失败:', error);
      // 如果获取失败，使用主机名和MAC地址组合作为备选方案
      const networkInterfaces = os.networkInterfaces();
      let macAddress = '';

      // 尝试获取第一个非内部网络接口的MAC地址
      Object.values(networkInterfaces).forEach((interfaces) => {
        if (interfaces) {
          interfaces.forEach((iface) => {
            if (!iface.internal && !macAddress && iface.mac !== '00:00:00:00:00:00') {
              macAddress = iface.mac;
            }
          });
        }
      });

      deviceId = `${os.hostname()}-${macAddress}`.replace(/:/g, '');
    }

    // 存储设备ID
    if (deviceId) {
      store.set('deviceId', deviceId);
    } else {
      // 如果所有方法都失败，使用随机ID
      deviceId = Math.random().toString(36).substring(2, 15);
      store.set('deviceId', deviceId);
    }
  }

  return deviceId;
}

/**
 * 获取系统信息
 */
export function getSystemInfo() {
  return {
    osType: os.type(),
    osVersion: os.release(),
    osArch: os.arch(),
    platform: process.platform,
    appVersion: app.getVersion()
  };
}
