/**
 * AI 定位 API 客户端
 *
 * 封装 AI 定位相关的请求接口。
 * 支持创建定位任务和查询定位结果。
 *
 * @module api/aiLocate
 * @author czj
 * @date 2026-07-29
 */

import request from '@/utils/request'

/** 定位请求参数 */
export interface LocateRequest {
  /** 步骤描述，如「输入用户名」 */
  step_description: string
  /** 目标网页 URL */
  page_url: string
  /** 预期结果（可选） */
  expected?: string
}

/** 创建任务响应 */
export interface LocateTaskResponse {
  /** 任务 ID */
  task_id: string
  /** 任务状态: pending / completed / failed */
  status: string
  /** 提示信息 */
  message: string
}

/** 定位候选 */
export interface LocateCandidate {
  /** 定位类型: css / xpath / text / id / name */
  locator_type: string
  /** 定位值 */
  locator_value: string
  /** 置信度 0-1 */
  confidence: number
  /** 元素信息 */
  element_info: Record<string, any>
}

/** 查询结果响应 */
export interface LocateResultResponse {
  /** 任务 ID */
  task_id: string
  /** 任务状态: pending / completed / failed */
  status: string
  /** 是否成功 */
  success: boolean
  /** 定位候选列表 */
  candidates: LocateCandidate[]
  /** 提示信息 */
  message: string
}

export const aiLocateApi = {
  /**
   * 创建定位任务
   *
   * 后端会创建任务文件并 SSH 调用宿主机 Claude Code 执行定位。
   *
   * @param data - 定位请求参数
   * @returns 任务信息，包含 task_id
   */
  locate(data: LocateRequest): Promise<LocateTaskResponse> {
    return request.post('/api/ai/locate', data)
  },

  /**
   * 查询定位结果
   *
   * 轮询此接口获取定位结果，status 为 completed 时表示定位完成。
   *
   * @param taskId - 任务 ID
   * @returns 定位结果，包含候选列表
   */
  getResult(taskId: string): Promise<LocateResultResponse> {
    return request.get(`/api/ai/locate/${taskId}/result`)
  },
}