import { requestClient } from '#/api/request';

/**
 * OA 场景管理 API
 * 路由前缀：oa-scene/
 */
const prefix = 'oa-scene/';

/**
 * 分页查询场景列表
 */
export async function getOaSceneList(data: any) {
  return requestClient.get<any>(`${prefix}list`, { params: data });
}

/**
 * 获取场景详情（含 robot_ids 和 at_users 字段）
 */
export async function getOaSceneInfo(id: number) {
  return requestClient.get<any>(`${prefix}detail`, { params: { id } });
}

/**
 * 新增场景
 * data 需包含：scene_code、scene_name、message_type、description、status、robot_ids、at_users
 */
export async function createOaScene(data: Record<string, any>) {
  return requestClient.post<any>(`${prefix}create`, data);
}

/**
 * 编辑场景（scene_code 不允许修改）
 */
export async function updateOaScene(data: Record<string, any>) {
  return requestClient.post<any>(`${prefix}update`, data);
}

/**
 * 删除场景（支持批量）
 */
export async function deleteOaScene(data: Record<string, any>) {
  return requestClient.post<any>(`${prefix}delete`, data);
}

/**
 * 获取所有平台支持的消息类型列表（含 payload_schema）
 * 返回结构：{ platform_code: [{ message_type, name, icon, need_media, payload_schema }, ...] }
 * 前端场景弹窗打开时调用，按平台 Tab 动态渲染消息类型选项 + payload 表单
 */
export async function getOaMessageTypes() {
  return requestClient.get<any>(`${prefix}message-types`);
}

/**
 * 场景测试发送（同步）
 * 可传 id（已保存）或草稿 message_config + robot_ids；test_params 覆盖正文类字段
 * platform_codes（任务 6）：可选指定只测试某些平台，未在列表中的机器人直接跳过
 */
export async function testSendOaScene(data: {
  id?: number;
  scene_code?: string;
  scene_name?: string;
  message_config?: Record<string, any>;
  robot_ids?: number[];
  at_users?: Record<string, any>;
  targets?: any[];
  platform_codes?: string[];
  test_params?: {
    content?: string;
    title?: string;
    url?: string;
    media_url?: string;
  };
}) {
  return requestClient.post<any>(`${prefix}test-send`, data);
}

/* ===================================================================== *
 * OA 测试发送手机号记忆库（任务 5）
 * 路由前缀：oa-test-phone/
 * 按 admin_id + platform_code 维度隔离，按 use_count 倒序常用排序
 * ===================================================================== */
const phonePrefix = 'oa-test-phone/';

/** 单条手机号记忆记录 */
export interface OaTestPhoneItem {
  id: number;
  phone: string;
  name?: string;
  use_count: number;
  last_used_at: number;
}

/**
 * 拉取当前操作员在某平台下的手机号记忆列表（按常用排序）
 * @param platformCode 平台编码
 */
export async function getOaTestPhones(platformCode: string) {
  return requestClient.get<OaTestPhoneItem[]>(`${phonePrefix}list-by-platform`, {
    params: { platform_code: platformCode },
  });
}

/**
 * 记录一次手机号使用（upsert + use_count++）
 * @param data { platform_code, phone, name? }
 */
export async function recordOaTestPhone(data: {
  platform_code: string;
  phone: string;
  name?: string;
}) {
  return requestClient.post<OaTestPhoneItem>(`${phonePrefix}record`, data);
}

/**
 * 批量记录多个手机号（一次测试发送可能 @ 多人）
 */
export async function recordOaTestPhonesBatch(data: {
  platform_code: string;
  phones: string[];
}) {
  return requestClient.post<any>(`${phonePrefix}record-batch`, data);
}

/**
 * 删除单条手机号记忆
 */
export async function deleteOaTestPhone(id: number) {
  return requestClient.post<any>(`${phonePrefix}delete`, { id });
}
