/**
 * 测试用例类型定义
 *
 * @module types/case
 * @author czj
 * @date 2026-07-09
 */

/** 测试步骤定义 */
export interface StepDefinition {
  /** 步骤顺序 */
  order: number
  /** 步骤名称 */
  name: string
  /** 动作类型 (navigate/click/fill/assert等) */
  action: string
  /** 动作参数 */
  params: Record<string, any>
  /** 预期结果 */
  expected?: string
  /** 多选择器回退链 */
  selectors?: string[]
  /** SelectorMapper 页面标识 */
  pageKey?: string
  /** 元素标识 */
  elementKey?: string
  /** 强制点击 */
  force?: boolean
  /** 自定义操作后延时(ms) */
  waitAfter?: number
}

/** 测试用例接口 */
export interface TestCase {
  /** 用例唯一标识 */
  id: string
  /** 所属模块ID */
  moduleId: string
  /** 用例名称 */
  name: string
  /** 用例描述 */
  description: string
  /** 状态 (active/disabled) */
  status: string
  /** 优先级 (high/medium/low) */
  priority: string
  /** 标签列表 */
  tags: string[]
  /** 测试步骤 */
  steps: StepDefinition[]
  /** 执行配置 */
  config: Record<string, any>
  /** 用例类型 ui/api/security/deploy/performance/functional */
  caseType?: string
  /** 创建时间 */
  createdAt: string
  /** 更新时间 */
  updatedAt: string
}

/** 创建用例请求参数 */
export interface CreateCaseRequest {
  /** 所属模块ID（后端 snake_case） */
  module_id: string
  /** 用例名称 */
  name: string
  /** 状态: active/disabled（create 时后端默认 active，update 时生效） */
  status?: string
  /** 用例描述 */
  description?: string
  /** 优先级 */
  priority?: string
  /** 标签 */
  tags?: string[]
  /** 步骤 */
  steps?: StepDefinition[]
  /** 配置 */
  config?: Record<string, any>
  /** 用例类型 ui/api/security/deploy/performance/functional */
  case_type?: string
}

/** 用例列表响应 */
export interface CaseListResponse {
  total: number
  items: TestCase[]
}