import { invoke } from '@tauri-apps/api/core'
import type { IdeaRecord, CreateIdeaInput, PromotionResult, IdeaEvaluationRecord, IdeaQuery } from './types'

export const ideaApi = {
  /**
   * 列出灵感。
   *
   * **双签名向后兼容**(F-260621-02):
   * - `list(status?)`:旧签名,仅状态过滤(等价 `list({ status })`)。
   * - `list(query?)`:新签名,多条件(status/keyword/order_by/limit/offset)走后端 WHERE。
   *
   * 参数为空 → 后端返回全量(created_at DESC,与旧 list_all 等价)。
   */
  list(queryOrStatus?: IdeaQuery | string): Promise<IdeaRecord[]> {
    if (typeof queryOrStatus === 'string') {
      return invoke('list_ideas', { status: queryOrStatus ?? null, query: null })
    }
    return invoke('list_ideas', { status: null, query: queryOrStatus ?? null })
  },

  create(input: CreateIdeaInput): Promise<IdeaRecord> {
    return invoke('create_idea', { input })
  },

  update(id: string, field: string, value: string): Promise<boolean> {
    return invoke('update_idea', { id, field, value })
  },

  delete(id: string): Promise<boolean> {
    return invoke('delete_idea', { id })
  },

  /** 多维评分 + 对抗式评估，结果写回并返回更新后的记录 */
  evaluate(id: string): Promise<IdeaRecord> {
    return invoke('evaluate_idea', { id })
  },

  /** 将灵感晋升为项目，返回晋升结果（含 project_id） */
  promote(id: string): Promise<PromotionResult> {
    return invoke('promote_idea', { id })
  },

  /** 双向同步关联关系:原子地设置主体灵感的目标关联列表,自动添加/移除反向关联。 */
  relateIdeas(subjectId: string, targetIds: string[]): Promise<void> {
    return invoke('relate_ideas', { subjectId, targetIds })
  },

  /** 列出灵感评估历史(version DESC)。Tauri 默认把 ideaId 映射到 idea_id。 */
  listEvaluations(ideaId: string): Promise<IdeaEvaluationRecord[]> {
    return invoke('list_idea_evaluations', { ideaId })
  },
}
