/**
 * 设备管理相关类型定义
 */

import { PaginationParams } from './common'
import type { ExpiryEstimateStatus } from './asset'

// ========== 设备状态枚举 ==========

// 设备状态枚举
export enum DeviceStatus {
  IN_STOCK = 1, // 在库
  DISTRIBUTED = 2, // 已分销
  ACTIVATED = 3, // 已激活
  DEACTIVATED = 4 // 已停用
}

// 设备业务状态枚举
export enum DeviceAssetStatus {
  IN_STOCK = 1, // 在库
  SOLD = 2, // 已销售
  REPLACED = 3, // 已换货
  DISABLED = 4 // 已停用
}

// 设备在线状态枚举
export enum DeviceOnlineStatus {
  UNKNOWN = 0, // 未知
  ONLINE = 1, // 在线
  OFFLINE = 2 // 离线
}

// 切卡模式
export type SwitchMode = '0' | '1' // 0=自动, 1=手动

// ========== 设备基础类型 ==========

// 设备信息
export interface Device {
  id: number // 设备ID
  virtual_no: string // 虚拟号（原 device_no）
  device_name: string // 设备名称
  device_model: string // 设备型号
  device_type: string // 设备类型
  manufacturer: string // 制造商
  max_sim_slots: number // 最大插槽数
  bound_card_count: number // 已绑定卡数量
  status: DeviceStatus // 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用)
  status_name: string // 状态名称
  generation?: number // 资产世代编号（初始值1，每次换货转新后+1）
  asset_status?: DeviceAssetStatus // 业务状态 (1:在库, 2:已销售, 3:已换货, 4:已停用)
  asset_status_name?: string // 业务状态名称（中文）
  shop_id: number | null // 店铺ID
  shop_name: string // 店铺名称
  batch_no: string // 批次号
  activated_at: string | null // 激活时间
  created_at: string // 创建时间
  updated_at: string // 更新时间
  series_id?: number | null // 套餐系列ID
  series_name?: string // 套餐系列名称
  online_status?: DeviceOnlineStatus // 在线状态：0=未知, 1=在线, 2=离线
  last_online_time?: string | null // 最后在线时间
  software_version?: string // 固件版本号
  switch_mode?: SwitchMode // 切卡模式："0"=自动, "1"=手动
  last_gateway_sync_at?: string | null // 最后 sync-info 同步时间
  imei?: string // IMEI（设备国际移动设备识别码）
  sn?: string // 设备序列号
  realname_policy?: string // 实名认证策略
  real_name_status: 0 | 1 // 实名状态 (0:未实名, 1:已实名)
  real_name_status_name: string // 实名状态名称
  estimated_final_expires_at?: string | null // 当前及排队主套餐接续后的预计最终到期时间
  days_until_final_expiry?: number | null // 距预计最终到期的剩余天数
  expiry_estimate_status?: ExpiryEstimateStatus // 预计最终到期时间状态
  expiry_estimate_status_name?: string | null // 预计最终到期时间状态名称
  is_expiring?: boolean // 是否临期，由后端判断
  authorized_enterprise_id?: number | null // 当前有效授权企业ID
  authorized_enterprise_name?: string | null // 当前有效授权企业名称
}

// 设备查询参数
export interface DeviceQueryParams extends PaginationParams {
  has_active_package?: boolean // has active package filter
  real_name_status?: 0 | 1 // 实名状态：0 未实名 / 1 已实名
  virtual_no?: string // 虚拟号(模糊查询，原 device_no)
  device_name?: string // 设备名称(模糊查询)
  status?: DeviceStatus // 状态
  shop_id?: number | null // 店铺ID (NULL表示平台库存)
  batch_no?: string // 批次号
  device_type?: string // 设备类型
  manufacturer?: string // 制造商(模糊查询)
  created_at_start?: string // 创建时间起始
  created_at_end?: string // 创建时间结束
  series_id?: number // 套餐系列ID
  keyword?: string // 关键词搜索（虚拟号或IMEI）
  authorized_enterprise_id?: number // 有效授权企业ID
  is_authorized_to_enterprise?: boolean | null // 是否已授权给企业
}

// 设备列表响应
export interface DeviceListResponse {
  items: Device[] | null // 设备列表
  page: number // 当前页码
  size: number // 每页数量
  total: number // 总数
}

// ========== 设备卡绑定相关 ==========

// 设备卡绑定信息
export interface DeviceCardBinding {
  id: number // 绑定记录ID
  iot_card_id: number // IoT卡ID
  iccid: string // ICCID
  msisdn: string // 接入号
  carrier_name: string // 运营商名称
  slot_position: number // 插槽位置 (1-4)
  status: number // 卡状态 (1:在库, 2:已分销, 3:已激活, 4:已停用)
  network_status: number // 网络状态 (0:停机, 1:开机)
  bind_time: string | null // 绑定时间
  is_current?: boolean // 是否为设备当前使用的卡
}

// 设备绑定的卡列表响应
export interface DeviceCardsResponse {
  bindings: DeviceCardBinding[] | null // 绑定列表
}

// 绑定卡到设备请求参数
export interface BindCardToDeviceRequest {
  iot_card_id: number // IoT卡ID
  slot_position: number // 插槽位置 (1-4)
}

// 绑定卡到设备响应
export interface BindCardToDeviceResponse {
  binding_id: number // 绑定记录ID
  message: string // 提示信息
}

// 解绑设备上的卡响应
export interface UnbindCardFromDeviceResponse {
  message: string // 提示信息
}

// ========== 批量分配和回收相关 ==========

// 批量分配设备请求参数
export interface AllocateDevicesRequest {
  device_ids: number[] // 设备ID列表
  target_shop_id: number // 目标店铺ID
  remark?: string // 备注
}

// 分配失败项
export interface AllocationDeviceFailedItem {
  device_id: number // 设备ID
  virtual_no: string // 虚拟号（原 device_no）
  reason: string // 失败原因
}

// 批量分配设备响应
export interface AllocateDevicesResponse {
  success_count: number // 成功数量
  fail_count: number // 失败数量
  failed_items: AllocationDeviceFailedItem[] | null // 失败详情列表
}

// 批量回收设备请求参数
export interface RecallDevicesRequest {
  device_ids: number[] // 设备ID列表
  remark?: string // 备注
}

// 批量回收设备响应
export interface RecallDevicesResponse {
  success_count: number // 成功数量
  fail_count: number // 失败数量
  failed_items: AllocationDeviceFailedItem[] | null // 失败详情列表
}

// ========== 设备导入相关 ==========

// 实名认证策略枚举
export enum RealnamePolicy {
  NONE = 'none', // 无需实名
  BEFORE_ORDER = 'before_order', // 先实名后充值/购买
  AFTER_ORDER = 'after_order' // 先充值/购买后实名
}

// 批量导入设备请求参数
export interface ImportDeviceRequest {
  file_key: string // 对象存储文件路径(通过 /storage/upload-url 获取)
  batch_no?: string // 批次号
  realname_policy?: RealnamePolicy // 实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)，默认 none
}

// 批量导入设备响应
export interface ImportDeviceResponse {
  message: string // 提示信息
  task_id: number // 导入任务ID
  task_no: string // 任务编号
}

// ========== 导入任务相关 ==========

// 导入任务状态枚举
export enum DeviceImportTaskStatus {
  PENDING = 1, // 待处理
  PROCESSING = 2, // 处理中
  COMPLETED = 3, // 已完成
  FAILED = 4 // 失败
}

// 导入任务查询参数
export interface DeviceImportTaskQueryParams extends PaginationParams {
  status?: DeviceImportTaskStatus // 任务状态
  batch_no?: string // 批次号(模糊查询)
  start_time?: string // 创建时间起始
  end_time?: string // 创建时间结束
}

// 导入任务信息
export interface DeviceImportTask {
  id: number // 任务ID
  task_no: string // 任务编号
  batch_no: string // 批次号
  file_name: string // 文件名
  file_key?: string // 原始导入文件存储键
  creator_name?: string // 创建人姓名
  status: DeviceImportTaskStatus // 任务状态
  status_text: string // 任务状态文本
  total_count: number // 总数
  success_count: number // 成功数
  fail_count: number // 失败数
  skip_count: number // 跳过数
  error_message: string // 错误信息
  created_at: string // 创建时间
  started_at: string | null // 开始处理时间
  completed_at: string | null // 完成时间
}

// 导入任务列表响应
export interface DeviceImportTaskListResponse {
  list: DeviceImportTask[] | null // 任务列表
  page: number // 当前页码
  page_size: number // 每页数量
  total: number // 总数
  total_pages: number // 总页数
}

// 导入结果详细项
export interface DeviceImportResultItem {
  line: number // 行号
  virtual_no: string // 虚拟号（原 device_no）
  reason: string // 原因
}

// 导入任务详情
export interface DeviceImportTaskDetail extends DeviceImportTask {
  failed_items: DeviceImportResultItem[] | null // 失败记录详情
  skipped_items: DeviceImportResultItem[] | null // 跳过记录详情
}

// ========== 批量设置设备的套餐系列绑定相关 ==========

// 选设备方式枚举
export enum DeviceSelectionType {
  LIST = 'list', // 设备ID列表
  RANGE = 'range', // 设备号范围
  FILTER = 'filter' // 筛选条件
}

// 批量设置设备的套餐系列绑定请求参数
export interface BatchSetDeviceSeriesBindingRequest {
  selection_type?: DeviceSelectionType // 选设备方式（兼容旧版时可不传，默认 list）
  series_id: number // 套餐系列ID（0表示清除关联）
  device_ids?: number[] // 设备ID列表（selection_type=list时必填，最多1000个）
  virtual_no_start?: string // 起始设备虚拟号（selection_type=range时必填）
  virtual_no_end?: string // 结束设备虚拟号（selection_type=range时必填）
  virtual_no?: string // 设备虚拟号（selection_type=filter时可选）
  device_name?: string // 设备名称（selection_type=filter时可选）
  device_type?: string // 设备类型（selection_type=filter时可选）
  manufacturer?: string // 制造商（selection_type=filter时可选）
  batch_no?: string // 批次号（selection_type=filter时可选）
  status?: DeviceStatus // 设备状态（selection_type=filter时可选）
  shop_id?: number // 店铺ID（selection_type=filter时可选）
  shop_ids?: number[] // 店铺ID列表（selection_type=filter时可选）
  filter_series_id?: number // 当前绑定套餐系列ID（selection_type=filter时可选）
  created_at_start?: string // 创建时间开始（selection_type=filter时可选）
  created_at_end?: string // 创建时间结束（selection_type=filter时可选）
}

// 设备套餐系列绑定失败项
export interface DeviceSeriesBindingFailedItem {
  device_id: number // 设备ID
  virtual_no: string // 虚拟号（原 device_no）
  reason: string // 失败原因
}

// 批量设置设备的套餐系列绑定响应
export interface BatchSetDeviceSeriesBindingResponse {
  success_count: number // 成功数量
  fail_count: number // 失败数量
  failed_items: DeviceSeriesBindingFailedItem[] | null // 失败详情列表
}

// ========== 设备操作相关 ==========

// 设置限速请求参数
export interface SetSpeedLimitRequest {
  download_speed: number // 下行速率（KB/s）
  upload_speed: number // 上行速率（KB/s）
}

// 切换SIM卡请求参数
export interface SwitchCardRequest {
  target_iccid: string // 目标卡 ICCID
}

// 设置WiFi请求参数
export interface SetWiFiRequest {
  card_no?: string // 设备资产标识
  enabled: boolean // 启用状态
  ssid: string // WiFi 名称（1-32字符）
  password: string // WiFi 密码（8-63字符）
}

// 空响应（设备操作成功）
export interface DeviceOperationResponse {
  message?: string // 提示信息
}
