/**
 * CRM 线索管理模块类型定义
 * API契约参考：docs/crm-api-contract-v3.md
 */

/**
 * 线索视图对象（响应）
 */
export interface CrmLeadVo {
  leadId: number;
  tenantId: string;
  customerCode?: string; // ERP客户编码
  companyName: string;
  contactName: string;
  mobile: string;
  wechat?: string;
  province?: string;
  city?: string;
  regionId?: number;
  regionName?: string;
  sourceType?: string;
  sourceTypeName?: string;
  activityName?: string;
  referrerName?: string;
  industry?: string;
  industryName?: string;
  companyScale?: string;
  storeCount?: number;
  intentLevel?: string;
  intentLevelName?: string;
  aiScore?: number;
  riskLevel?: string;
  riskLevelName?: string;
  ownerUserId?: number;
  ownerUserName?: string;
  leadStatus: string;
  leadStatusName?: string;
  convertedDealerId?: number;
  nextFollowTime?: string;
  remark?: string;
  createBy: number;
  createByName?: string;
  createTime: string;
  updateBy?: number;
  updateByName?: string;
  updateTime?: string;
}

/**
 * 线索业务对象（请求）
 */
export interface CrmLeadBo {
  leadId?: number;
  customerCode?: string; // ERP客户编码（可选）
  companyName: string;
  contactName: string;
  mobile: string;
  wechat?: string;
  province?: string;
  city?: string;
  regionId?: number;
  sourceType?: string;
  activityName?: string;
  referrerName?: string;
  industry?: string;
  companyScale?: string;
  storeCount?: number;
  ownerUserId?: number;
  remark?: string;
}

/**
 * 线索查询参数
 */
export interface LeadQueryParams {
  companyName?: string; // 公司名称（模糊查询）
  mobile?: string; // 手机号
  intentLevel?: string; // AI意向等级
  riskLevel?: string; // 风险等级
  ownerUserId?: number; // 负责人ID
  leadStatus?: string; // 线索状态
  sourceType?: string; // 来源类型
  customerCode?: string; // ERP客户编码
  pageNum: number;
  pageSize: number;
}

/**
 * 线索统计视图对象
 */
export interface CrmLeadStatsVo {
  totalCount: number; // 线索总数
  highIntentCount: number; // 高意向线索数量
  monthlyNewCount: number; // 本月新增线索数量
  lastMonthNewCount: number; // 上月新增线索数量
  convertedCount: number; // 已转化线索数量
  conversionRate: number; // 转化率（百分比）
  monthlyConvertedCount: number; // 本月转化数量
  lastMonthConvertedCount: number; // 上月转化数量
  monthlyHighIntentCount: number; // 本月高意向数量
  lastMonthHighIntentCount: number; // 上月高意向数量
}

/**
 * 线索跟进记录视图对象
 */
export interface CrmLeadFollowVo {
  followId: number;
  leadId: number;
  followType: string;
  followTypeName?: string;
  content: string;
  aiSummary?: string;
  nextFollowTime?: string;
  followUserId: number;
  followUserName?: string;
  createTime: string;
}

/**
 * 线索跟进记录业务对象
 */
export interface CrmLeadFollowBo {
  followId?: number;
  leadId: number;
  followType: string;
  content: string;
  nextFollowTime?: string;
}

/**
 * 线索分配请求
 */
export interface LeadAssignRequest {
  leadId: number;
  ownerUserId: number; // 新负责人ID
}

/**
 * 线索转经销商请求（第二阶段）
 */
export interface LeadConvertRequest {
  leadId: number;
  dealerName: string;
  dealerCode: string;
  customerCode?: string; // ERP客户编码（可选）
  signedAt?: string; // 签约时间
  level?: string; // 经销商等级 (A/B/C)
}

/**
 * ========================================
 * CRM 商机管理模块类型定义
 * ========================================
 */

/**
 * 商机视图对象（响应）
 */
export interface CrmOpportunityVo {
  opportunityId: number;
  tenantId: string;
  dealerId: number;
  dealerName?: string; // 经销商名称（翻译）
  opportunityName: string;
  stage: string;
  stageName?: string; // 阶段名称（翻译）
  amount?: number; // 商机金额
  probability?: number; // 成功概率（百分比）
  expectedCloseDate?: string; // 预计成交日期
  actualCloseDate?: string; // 实际成交日期
  ownerUserId?: number;
  ownerUserName?: string; // 负责人姓名（翻译）
  productName?: string;
  description?: string;
  sourceLeadId?: number; // 来源线索ID
  status: string;
  statusName?: string; // 状态名称（翻译）
  createBy: number;
  createByName?: string;
  createTime: string;
  updateBy?: number;
  updateByName?: string;
  updateTime?: string;
}

/**
 * 商机业务对象（请求）
 */
export interface CrmOpportunityBo {
  opportunityId?: number;
  dealerId: number; // 经销商ID（必填）
  opportunityName: string; // 商机名称（必填）
  stage?: string; // 商机阶段
  amount?: number; // 商机金额
  probability?: number; // 成功概率（0-100）
  expectedCloseDate?: string; // 预计成交日期
  actualCloseDate?: string; // 实际成交日期
  ownerUserId?: number; // 负责人
  productName?: string;
  description?: string;
  sourceLeadId?: number; // 来源线索ID
  status?: string; // 状态
}

/**
 * 商机查询参数
 */
export interface OpportunityQueryParams {
  dealerId?: number; // 经销商ID
  opportunityName?: string; // 商机名称（模糊查询）
  stage?: string; // 商机阶段
  ownerUserId?: number; // 负责人ID
  status?: string; // 状态
  pageNum: number;
  pageSize: number;
}

/**
 * 通用响应格式 R<T>
 */
export interface R<T> {
  code: number;
  msg: string;
  data?: T;
}

/**
 * 分页响应格式 TableDataInfo<T>
 */
export interface TableDataInfo<T> {
  code: number;
  msg: string;
  rows: T[];
  total: number;
}

/**
 * ========================================
 * CRM 经销商管理模块类型定义
 * ========================================
 */

/**
 * 经销商视图对象（响应）
 */
export interface CrmDealerVo {
  dealerId: number;
  tenantId: string;
  customerCode?: string; // ERP客户编码
  dealerName: string; // 经销商名称
  dealerCode: string; // 经销商编码
  contactName?: string; // 联系人
  mobile?: string; // 手机
  province?: string; // 省
  city?: string; // 市
  level?: string; // 等级（A/B/C）
  levelName?: string; // 等级名称（翻译）
  lifecycle?: string; // 生命周期
  lifecycleName?: string; // 生命周期名称（翻译）
  signedAt?: string; // 签约时间
  storeCount?: number; // 门店数
  teamSize?: number; // 团队规模
  totalOrderAmount?: number; // 累计订单金额
  totalPaymentAmount?: number; // 累计回款金额
  activityScore?: number; // 活跃评分
  riskScore?: number; // 风险评分
  ownerUserId?: number; // 负责人
  ownerUserName?: string; // 负责人姓名（翻译）
  sourceLeadId?: number; // 来源线索ID
  status?: string; // 状态
  statusName?: string; // 状态名称（翻译）
  hasPendingAlerts?: boolean; // 是否有待处理预警（扩展字段）
  createBy: number;
  createByName?: string;
  createTime: string;
  updateBy?: number;
  updateByName?: string;
  updateTime?: string;
}

/**
 * 经销商查询参数
 */
export interface DealerQueryParams {
  dealerName?: string;
  dealerCode?: string;
  customerCode?: string;
  level?: string;
  lifecycle?: string;
  ownerUserId?: number;
  pageNum: number;
  pageSize: number;
}

/**
 * ERP客户选择器数据
 */
export interface ErpCustomerSelectVo {
  customerCode: string;
  customerName: string;
  companyCode?: string;
  companyName?: string;
  contactName?: string;
  phone?: string;
  province?: string;
  city?: string;
  isStop?: number;
}

/**
 * 同步预警视图对象
 */
export interface CrmSyncAlertVo {
  id: number;
  tenantId: string;
  syncLogId?: number;
  dealerId: number;
  customerCode: string;
  alertType: string;
  crmValue?: string;
  erpValue?: string;
  alertMessage?: string;
  status: string;
  resolvedBy?: number;
  resolvedTime?: string;
  resolvedNote?: string;
  createTime: string;
  dealerName?: string;
}

/**
 * 即时同步结果
 */
export interface InstantSyncResult {
  success: boolean;
  message: string;
  updated: boolean;
  alerts?: CrmSyncAlertVo[];
  erpInfo?: Record<string, any>;
}