package com.red.circle.other.domain.gateway.user.ability;

import com.red.circle.other.inner.model.cmd.user.IncrDeviceRegisterCmd;
import com.red.circle.other.inner.model.cmd.user.device.AllowDeviceRegisterCmd;

/**
 * 注册设备.
 *
 * @author pengliang on 2023/12/17
 */
public interface RegisterDeviceGateway {

  /**
   * 累计注册数量.
   */
  void incrRegisterQuantityAsync(IncrDeviceRegisterCmd cmd);

  /**
   * 是否允许用户设备注册.
   *
   * @return true 允许注册、false 不允许
   */
  boolean checkAllowDeviceRegister(AllowDeviceRegisterCmd cmd);

  /**
   * 获取用户设备指纹
   *
   * @param userId 用户ID
   * @return 设备指纹字符串
   */
  String getDeviceFingerprintByUserId(Long userId);

  /**
   * 检查当前用户的设备指纹是否与其他主播用户共享
   *
   * @param userId 用户ID
   * @return true-存在共享设备的主播用户, false-不存在
   */
  Boolean checkDeviceFingerprintHasAnchor(Long userId);

  /**
   * 获取用户设备指纹（增强版）
   * 包含：手机型号 + 系统版本 + IP段 + 编译版本
   *
   * @param userId 用户ID
   * @return 设备指纹MD5字符串
   */
  String getEnhancedDeviceFingerprintByUserId(Long userId);

  /**
   * 检查用户设备名单状态.
   * 黑名单返回 "BLOCK"，白名单返回 ""，未设置返回 null.
   *
   * @param userId 用户ID
   * @return 名单状态字符串
   */
  String checkDeviceListStatus(Long userId);
}
