import request from '../utils/request'

/**
 * 工作流 API。
 *
 * 路由策略（方案C）：URL 路径参数统一使用 name（kebab-case）；
 * 旧数字 id 作为字符串传入时也可被后端 getWorkflow(nameOrId) 兜底解析。
 */
export function getWorkflows(params = {}) {
  return request.get('/workflows', { params })
}

export function setWorkflowCategory(nameOrId, categoryId) {
  return request.put(`/workflows/${nameOrId}/category`, { categoryId })
}

export function getWorkflow(nameOrId) {
  return request.get(`/workflows/${nameOrId}`)
}

export function createWorkflow(data) {
  return request.post('/workflows', data)
}

export function saveWorkflow(nameOrId, data) {
  return request.post(`/workflows/${nameOrId}/save`, data)
}

export function deleteWorkflow(nameOrId) {
  return request.post(`/workflows/${nameOrId}/delete`)
}

/**
 * 运行工作流（POST SSE 流式响应）
 * 支持文件/目录上传：使用 FormData 提交
 * paths 为每个文件在工作目录中的相对路径（目录上传时保留目录结构）
 * 返回原生 fetch Response，需自行解析 SSE 流
 */
export function runWorkflow(nameOrId, inputs, files = [], paths = []) {
  const formData = new FormData()
  formData.append('inputs', JSON.stringify(inputs || {}))
  files.forEach((file, i) => {
    formData.append('files', file)
    formData.append('paths', paths[i] || file.name)
  })
  return fetch(`/api/workflows/${nameOrId}/run`, {
    method: 'POST',
    body: formData
  })
}

/**
 * 自动关联分析：识别 Skill/SmartAction 节点隐式引用的其他 Skill
 */
export function autoAssociate(graphData) {
  return request.post('/workflows/auto-associate', { graphData })
}

// ==================== 版本管理 ====================

export function listWorkflowVersions(nameOrId) {
  return request.get(`/workflows/${nameOrId}/versions`)
}

export function getWorkflowVersionContent(nameOrId, version) {
  return request.get(`/workflows/${nameOrId}/versions/${version}/content`)
}

export function rollbackWorkflowVersion(nameOrId, version) {
  return request.post(`/workflows/${nameOrId}/versions/${version}/rollback`)
}

export function updateWorkflowVersionMessage(nameOrId, version, message) {
  return request.put(`/workflows/${nameOrId}/versions/${version}/message`, { message })
}
