/**
 * 网卡相关类型定义
 */

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

// 运营商类型
export enum Operator {
  CHINA_MOBILE = 'mobile', // 中国移动
  CHINA_UNICOM = 'unicom', // 中国联通
  CHINA_TELECOM = 'telecom', // 中国电信
  GS_MOBILE = 'gs_mobile', // GS移动
  GS_UNICOM = 'gs_unicom', // GS联通
  GS_TELECOM = 'gs_telecom', // GS电信
  DC_IOT = 'dc_iot', // DC物联
  GDWL = 'gdwl' // GDWL
}

// 网卡状态
export enum CardStatus {
  ACTIVATED = 1, // 激活
  DEACTIVATED = 2, // 停用
  TESTING = 3, // 测试
  INVENTORY = 4, // 库存
  SUSPENDED = 5, // 停机
  EXPIRED = 6 // 已过期
}

// 网络类型
export enum NetworkType {
  '2G' = '2G',
  '3G' = '3G',
  '4G' = '4G',
  '5G' = '5G',
  NB_IOT = 'NB-IoT'
}

// 卡类型
export enum CardType {
  MONTHLY = 'monthly', // 月卡
  ANNUAL = 'annual', // 年卡
  FLOW = 'flow' // 流量卡
}

// 卡业务类型
export enum CardCategory {
  NORMAL = 'normal', // 普通卡
  INDUSTRY = 'industry' // 行业卡
}

// 号卡商品实体
export interface SimCardProduct {
  id: string | number
  productCode: string // 商品编码
  productName: string // 商品名称
  operator: Operator // 运营商
  networkType: NetworkType // 网络类型
  cardType: CardType // 卡类型
  description?: string
  price?: number // 价格
  status: 1 | 0 // 上架/下架
  createTime: string
  updateTime?: string
}

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

// 网卡实体
export interface Card {
  id: string | number
  iccid: string // ICCID
  imsi?: string // IMSI
  msisdn?: string // 手机号码
  operator: Operator // 运营商
  networkType: NetworkType
  cardType: CardType
  status: CardStatus
  generation?: number // 资产世代编号（初始值1，每次换货转新后+1）
  asset_status?: AssetStatus // 业务状态 (1:在库, 2:已销售, 3:已换货, 4:已停用)
  asset_status_name?: string // 业务状态名称（中文）
  // 关联信息
  productId?: string | number // 关联商品ID
  productName?: string
  packageId?: string | number // 当前套餐ID
  packageName?: string
  agentId?: string | number // 所属代理商ID
  agentName?: string
  deviceId?: string | number // 绑定设备ID
  deviceCode?: string
  // 业务信息
  totalFlow?: number // 总流量（MB）
  usedFlow?: number // 已用流量（MB）
  remainFlow?: number // 剩余流量（MB）
  expireTime?: string // 过期时间
  activateTime?: string // 激活时间
  walletBalance?: number // 钱包余额
  // 导入信息
  importBatch?: string // 导入批次
  importTime?: string
  // 公司信息
  cardCompanyId?: string | number
  cardCompanyName?: string
  // 时间信息
  createTime: string
  updateTime?: string
}

// 网卡查询参数
export interface CardQueryParams extends PaginationParams {
  keyword?: string // ICCID/IMSI/手机号
  operator?: Operator
  status?: CardStatus
  agentId?: string | number
  packageId?: string | number
  cardCompanyId?: string | number
  importBatch?: string
  expireTimeRange?: [string, string]
  importTimeRange?: [string, string]
}

// IoT 卡导入请求
export interface ImportIotCardRequest {
  carrier_id: number // 运营商ID
  file_key: string // 对象存储文件路径
  batch_no?: string // 批次号
  card_category?: CardCategory // 卡业务类型(新增,可选,默认 normal)
  realname_policy?: 'none' | 'before_order' | 'after_order' // 实名认证策略
}

// IoT 卡导入响应
export interface ImportIotCardResponse {
  task_id: number // 导入任务ID
  task_no: string // 任务编号
  message: string // 提示信息
}

// 网卡导入批次信息
export interface CardImportBatch extends ImportTask {
  importBatch: string // 导入批次号
  agentId?: string | number
  agentName?: string
  packageId?: string | number
  packageName?: string
  cardCompanyId?: string | number
  cardCompanyName?: string
  operator: Operator
  cardType: CardType
  cardCategory?: CardCategory // 卡业务类型(新增)
  operatorUser?: string // 操作人
}

// 网卡操作类型
export enum CardOperationType {
  RECHARGE = 'recharge', // 套餐充值
  SUSPEND = 'suspend', // 停机
  RESUME = 'resume', // 复机
  CHANGE_EXPIRE_TIME = 'changeExpireTime', // 更改过期时间
  TRANSFER = 'transfer', // 转卡
  ADD_FLOW = 'addFlow', // 增加流量
  REDUCE_FLOW = 'reduceFlow', // 减少流量
  CHANGE_WALLET = 'changeWallet', // 变更钱包余额
  RESET_PASSWORD = 'resetPassword', // 充值支付密码
  RENEW = 'renew' // 续充
}

// 网卡操作参数
export interface CardOperationParams {
  iccid: string
  operation: CardOperationType
  // 不同操作需要的参数
  packageId?: string | number // 套餐充值
  expireTime?: string // 更改过期时间
  targetIccid?: string // 转卡目标ICCID
  flow?: number // 增减流量
  amount?: number // 金额
  password?: string // 密码
  remark?: string // 备注
}

// 号卡分配参数
export interface CardAssignParams {
  productId: string | number
  agentId: string | number
  commissionMode: 'template' | 'custom' // 佣金模式：模板/自定义
  commissionTemplateId?: string | number // 佣金模板ID
  commissionRate?: number // 自定义佣金比例
  quantity: number // 分配数量
}

// 网卡批量充值记录
export interface BatchRechargeRecord {
  id: string | number
  batchNo: string // 批次号
  fileName: string // 文件名
  totalCount: number
  successCount: number
  failCount: number
  totalAmount?: number // 总金额
  status: 'pending' | 'processing' | 'completed' | 'failed'
  createTime: string
  operatorName?: string
}

// 换卡申请
export interface CardChangeApplication {
  id: string | number
  applicationNo: string // 申请单号
  oldIccid: string // 旧ICCID
  newIccid?: string // 新ICCID
  reason: string // 换卡原因
  status: 'pending' | 'approved' | 'rejected' | 'completed'
  applicantId: string | number
  applicantName: string
  applicantType: 'agent' | 'enterprise'
  applyTime: string
  processTime?: string
  processorName?: string
  remark?: string
}

// 处理换卡申请参数
export interface ProcessCardChangeParams {
  id: string | number
  status: 'approved' | 'rejected'
  newIccid?: string // 通过时填写
  remark?: string
}

// 流量详情
export interface FlowDetail {
  date: string
  usedFlow: number // MB
  description?: string
}

// 停复机记录
export interface SuspendResumeRecord {
  id: string | number
  iccid: string
  operation: 'suspend' | 'resume'
  operatorName: string
  operateTime: string
  remark?: string
}

// 网卡历史订单
export interface CardOrder {
  id: string | number
  orderNo: string
  iccid: string
  orderType: 'recharge' | 'renew' | 'transfer'
  packageName?: string
  amount: number
  status: 'pending' | 'success' | 'failed'
  createTime: string
  payTime?: string
}

// ========== ICCID批量导入相关 ==========

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

// ICCID导入请求参数
export interface ImportIotCardParams {
  carrier_id: number // 运营商ID
  batch_no?: string // 批次号
  file: File // 文件
}

// ICCID导入响应
export interface ImportIotCardResponse {
  message: string
  task_id: number
  task_no: string
}

// 导入任务记录
export interface IotCardImportTask {
  id: number // 任务ID
  task_no: string // 任务编号
  batch_no?: string // 批次号 (可选)
  carrier_id: number // 运营商ID
  carrier_type: string // 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信)
  carrier_name: string // 运营商名称
  file_name: string // 文件名
  file_key?: string // 原始导入文件存储键
  creator_name?: string // 创建人姓名
  card_category?: CardCategory // 卡业务类型
  status: IotCardImportTaskStatus // 任务状态
  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 IotCardImportTaskQueryParams extends PaginationParams {
  status?: IotCardImportTaskStatus // 任务状态
  carrier_id?: number // 运营商ID
  batch_no?: string // 批次号(模糊查询)
  start_time?: string // 创建时间起始
  end_time?: string // 创建时间结束
}

// 导入结果详细项
export interface ImportResultItem {
  line: number // 行号
  iccid: string // ICCID
  reason: string // 原因
}

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

// ========== 单卡列表（未绑定设备）相关 ==========

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

// 单卡查询参数
export interface StandaloneCardQueryParams extends PaginationParams {
  keyword?: string // 通用关键字搜索
  has_active_package?: boolean // has active package filter
  real_name_status?: 0 | 1 // 实名状态：0 未实名 / 1 已实名
  carrier_name?: string // carrier name filter
  is_standalone?: boolean // standalone filter
  status?: StandaloneCardStatus // 状态
  network_status?: number | null // 网络状态 (0:停机, 1:开机)
  authorized_enterprise_id?: number // 有效授权企业ID
  is_authorized_to_enterprise?: boolean | null // 是否已授权给企业
  carrier_id?: number // 运营商ID
  shop_id?: number // 分销商ID
  iccid?: string // ICCID(模糊查询)
  msisdn?: string // 卡接入号(模糊查询)
  virtual_no?: string // 卡虚拟号(模糊查询)
  device_virtual_no?: string // 绑定设备虚拟号(模糊查询)
  batch_no?: string // 批次号
  package_id?: number // 套餐ID
  is_distributed?: boolean // 是否已分销
  is_replaced?: boolean // 是否有换卡记录
  iccid_start?: string // ICCID起始号
  iccid_end?: string // ICCID结束号
  series_id?: number // 套餐系列ID
}

// 单卡信息
export interface StandaloneIotCard {
  gateway_card_imei?: string // 网关侧返回的卡 IMEI（可空）
  id: number // 卡ID
  iccid: string // ICCID
  imsi?: string // IMSI (可选)
  msisdn?: string // 卡接入号 (可选)
  virtual_no?: string // 卡虚拟号（可空）
  device_virtual_no?: string // 绑定设备虚拟号（可空）
  carrier_id: number // 运营商ID
  carrier_type: string // 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电)
  carrier_name: string // 运营商名称
  card_type: string // 卡类型 (physical:物理卡, data_card:流量卡, voice_card:语音卡等)
  card_category: string // 卡业务类型 (normal:普通卡, industry:行业卡)
  status: StandaloneCardStatus // 状态
  activation_status: number // 激活状态 (0:未激活, 1:已激活)
  network_status: number // 网络状态 (0:停机, 1:开机)
  real_name_status: 0 | 1 // 实名状态 (0:未实名, 1:已实名)
  real_name_status_name: string // 实名状态名称
  generation?: number // 资产世代编号（初始值1，每次换货转新后+1）
  asset_status?: AssetStatus // 业务状态 (1:在库, 2:已销售, 3:已换货, 4:已停用)
  asset_status_name?: string // 业务状态名称（中文）
  batch_no?: string // 批次号 (可选)
  supplier?: string // 供应商 (可选)
  shop_id?: number | null // 店铺ID (可选)
  shop_name?: string // 店铺名称 (可选)
  cost_price: number // 成本价(分)
  distribute_price: number // 分销价(分)
  data_usage_mb: number // 累计流量使用(MB)
  current_month_usage_mb?: number // 自然月累计流量(MB)
  current_month_start_date?: string | null // 本月开始日期
  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 // 是否临期，由后端判断
  last_month_total_mb?: number // 上月流量总量(MB)
  last_data_check_at?: string | null // 最后流量检查时间
  last_real_name_check_at?: string | null // 最后实名检查时间
  enable_polling?: boolean // 是否启用轮询
  first_commission_paid: boolean // 是否已支付首次佣金
  accumulated_recharge: number // 累计充值金额(分)
  activated_at?: string | null // 激活时间 (可选)
  created_at: string // 创建时间
  updated_at: string // 更新时间
  series_id: number | null // 套餐系列ID
  series_name: string // 套餐系列名称
  realname_policy: string // 实名制策略
  authorized_enterprise_id?: number | null // 当前有效授权企业ID
  authorized_enterprise_name?: string | null // 当前有效授权企业名称
}

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

// 选卡方式枚举
export enum CardSelectionType {
  LIST = 'list', // ICCID列表
  RANGE = 'range', // 号段范围
  FILTER = 'filter' // 筛选条件
}

// 批量分配单卡请求参数
export interface AllocateStandaloneCardsRequest {
  selection_type: CardSelectionType // 选卡方式
  to_shop_id: number // 目标店铺ID
  iccids?: string[] // ICCID列表（selection_type=list时必填）
  iccid_start?: string // 起始ICCID（selection_type=range时必填）
  iccid_end?: string // 结束ICCID（selection_type=range时必填）
  carrier_id?: number // 运营商ID（selection_type=filter时可选）
  status?: StandaloneCardStatus // 卡状态（selection_type=filter时可选）
  batch_no?: string // 批次号（selection_type=filter时可选）
  remark?: string // 备注
}

// 批量回收单卡请求参数
export interface RecallStandaloneCardsRequest {
  selection_type: CardSelectionType // 选卡方式
  from_shop_id: number // 来源店铺ID（被回收方）
  iccids?: string[] // ICCID列表（selection_type=list时必填）
  iccid_start?: string // 起始ICCID（selection_type=range时必填）
  iccid_end?: string // 结束ICCID（selection_type=range时必填）
  carrier_id?: number // 运营商ID（selection_type=filter时可选）
  batch_no?: string // 批次号（selection_type=filter时可选）
  remark?: string // 备注
}

// 分配失败项
export interface AllocationFailedItem {
  iccid: string // ICCID
  reason: string // 失败原因
}

// 批量分配/回收响应
export interface AllocateStandaloneCardsResponse {
  allocation_no: string // 分配/回收单号
  total_count: number // 待分配/回收总数
  success_count: number // 成功数
  fail_count: number // 失败数
  failed_items: AllocationFailedItem[] | null // 失败项列表
}

// ========== 资产分配记录相关 ==========

// 分配类型枚举
export enum AllocationTypeEnum {
  ALLOCATE = 'allocate', // 分配
  RECALL = 'recall' // 回收
}

// 资产类型枚举
export enum AssetTypeEnum {
  IOT_CARD = 'iot_card', // 物联网卡
  DEVICE = 'device' // 设备
}

// 资产分配记录查询参数
export interface AssetAllocationRecordQueryParams extends PaginationParams {
  allocation_type?: AllocationTypeEnum // 分配类型
  asset_type?: AssetTypeEnum // 资产类型
  asset_identifier?: string // 资产标识符（ICCID或设备号）
  allocation_no?: string // 分配单号
  from_shop_id?: number // 来源店铺ID
  to_shop_id?: number // 目标店铺ID
  operator_id?: number // 操作人ID
  created_at_start?: string // 创建时间起始
  created_at_end?: string // 创建时间结束
}

// 资产分配记录
export interface AssetAllocationRecord {
  id: number // 记录ID
  allocation_no: string // 分配单号
  allocation_type: AllocationTypeEnum // 分配类型
  allocation_name: string // 分配类型名称
  asset_type: AssetTypeEnum // 资产类型
  asset_type_name: string // 资产类型名称
  asset_id: number // 资产ID
  asset_identifier: string // 资产标识符（ICCID或设备号）
  from_owner_id: number | null // 来源所有者ID
  from_owner_name: string // 来源所有者名称
  from_owner_type: string // 来源所有者类型
  to_owner_id: number // 目标所有者ID
  to_owner_name: string // 目标所有者名称
  to_owner_type: string // 目标所有者类型
  operator_id: number // 操作人ID
  operator_name: string // 操作人名称
  related_card_count: number // 关联卡数量
  related_device_id: number | null // 关联设备ID
  remark: string // 备注
  created_at: string // 创建时间
}

// 资产分配记录详情
export interface AssetAllocationRecordDetail extends AssetAllocationRecord {
  related_card_ids: number[] // 关联卡ID列表
}

// ========== 单卡详情查询相关 ==========

// IoT卡详情响应（对应 /api/admin/iot-cards/by-iccid/{iccid} 接口）
export interface IotCardDetailResponse {
  id: number // 卡ID
  iccid: string // ICCID
  imsi: string // IMSI
  msisdn: string // 卡接入号
  virtual_no?: string // 虚拟号（可空）
  carrier_id: number // 运营商ID
  carrier_name: string // 运营商名称
  carrier_type: string // 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电)
  card_type: string // 卡类型
  card_category: string // 卡业务类型 (normal:普通卡, industry:行业卡)
  status: number // 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用)
  activation_status: number // 激活状态 (0:未激活, 1:已激活)
  network_status: number // 网络状态 (0:停机, 1:开机)
  real_name_status: number // 实名状态 (0:未实名, 1:已实名)
  generation?: number // 资产世代编号（初始值1，每次换货转新后+1）
  asset_status?: AssetStatus // 业务状态 (1:在库, 2:已销售, 3:已换货, 4:已停用)
  asset_status_name?: string // 业务状态名称（中文）
  batch_no: string // 批次号
  supplier: string // 供应商
  shop_id: number | null // 店铺ID
  shop_name: string // 店铺名称
  cost_price: number // 成本价(分)
  distribute_price: number // 分销价(分)
  data_usage_mb: number // 累计流量使用(MB)
  activated_at: string | null // 激活时间
  created_at: string // 创建时间
  updated_at: string // 更新时间
}

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

// 批量设置卡的套餐系列绑定请求参数
export interface BatchSetCardSeriesBindingRequest {
  selection_type?: CardSelectionType // 选卡方式（兼容旧版时可不传，默认 list）
  series_id: number // 套餐系列ID（0表示清除关联）
  iccids?: string[] // ICCID列表（selection_type=list时必填，最多1000个）
  iccid_start?: string // 起始ICCID（selection_type=range时必填）
  iccid_end?: string // 结束ICCID（selection_type=range时必填）
  carrier_id?: number // 运营商ID（selection_type=filter时可选）
  status?: StandaloneCardStatus // 卡状态（selection_type=filter时可选）
  batch_no?: string // 批次号（selection_type=filter时可选）
}

// 卡套餐系列绑定失败项
export interface CardSeriesBindingFailedItem {
  iccid: string // ICCID
  reason: string // 失败原因
}

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

// ========== IoT卡网关操作相关 ==========

// 查询流量使用响应
export interface GatewayFlowUsageResponse {
  extend?: string // 扩展字段（广电国网特殊参数）
  unit?: string // 流量单位（MB）
  usedFlow?: number // 已用流量
}

// 查询实名认证状态响应
export interface GatewayRealnameStatusResponse {
  extend?: string // 扩展字段（广电国网特殊参数）
  status?: string // 实名认证状态
}

// 查询卡实时状态响应
export interface GatewayCardStatusResponse {
  cardStatus?: string // 卡状态（准备、正常、停机）
  extend?: string // 扩展字段（广电国网特殊参数）
  iccid?: string // ICCID
}

// 获取实名认证链接响应
export interface GatewayRealnameLinkResponse {
  extend?: string // 扩展字段（广电国网特殊参数）
  link?: string // 实名认证跳转链接（HTTPS URL）
}
