import deviceRequest from "@/utils/device-request"

/**
 * 设备端API
 * 用于智慧校园设备(如家校通话设备)的接口调用
 */
export const deviceApi = {
  /**
   * 设备登录
   * @param {string} sn - 设备序列号(devId)
   * @param {string} cardNo - 卡号
   * @returns {Promise} 返回登录结果,包含 userInfo 和 sessId
   *
   * 返回数据格式参考 h5-controller.vue handleLoginSuccess:
   * {
   *   success: true,
   *   userInfo: {
   *     sessId: 'xxx',  // JSESSIONID
   *     ... // 其他用户信息
   *   }
   * }
   */
  login(sn, cardNo) {
    return deviceRequest.get(
      `/service?ssServ=ssLogin&devId=${sn}&cardNo=${cardNo}&sbmc=${sn}`,
      {},
      {
        loading: { title: '设备登录中...' },
        request: {
          timeout: 15000
        }
      }
    )
  },

  /**
   * 设备退出登录
   * @returns {Promise}
   */
  ssExit() {
    return deviceRequest.post(
      `/service?ssServ=ssExit`,
      {},
      {
        loading: false,
        formData: true,
        request: {
          timeout: 15000
        }
      }
    )
  },

  /**
   * 查询家长信息（联系人）
   * @returns {Promise} 返回家长信息
   *
   * 注意：
   * - 不需要传参数，后端通过 URL 中的 devId 和 sbmc 自动识别用户
   * - device-request.js 会自动从 userInfo 中获取 devId 和 sbmc 添加到 URL
   * - 现在只返回一个家长，不是数组
   *
   * 返回数据格式:
   * {
   *   data: {
   *     ssData: {
   *       ryid: 111129603,              // 人员ID
   *       wbid: 'oKFvD4j...',           // 外部ID（微信openid）
   *       xm: '测试家长1',               // 姓名
   *       yszwj: 'path/to/image.jpg'    // 艺术照（可选，需要用 getImageUrl 转换）
   *     },
   *     ssCode: 0
   *   }
   * }
   */
  selParentInfo() {
    return deviceRequest.post(
      `/service?ssServ=selParentInfo`,
      {},
      {
        loading: { title: '获取联系人...' },
        formData: true
      }
    )
  },

  /**
   * 查询留言成员（设备端）
   * @returns {Promise} 返回 chatMbrList
   */
  mp_telHomep_load() {
    return deviceRequest.post(
      `/service?ssServ=mp_telHomep_load`,
      {},
      {
        loading: { title: '获取留言联系人...' },
        formData: true,
        request: {
          timeout: 120000
        }
      }
    )
  },
  /**
   * 刷新电话机首页留言提醒（未刷卡态）
   * @returns {Promise} 返回 xyList(家长来信学员) / jzList(电话机发出未读家长)
   */
  tel_refreshLogin() {
    return deviceRequest.post(
      `/service?ssServ=tel_refreshLogin`,
      {},
      {
        loading: false,
        formData: true,
        request: {
          timeout: 120000
        }
      }
    )
  },

  /**
   * 检查个人服务状态（刷卡进入时调用）
   * @param {string} grfwxmm - 个人服务项目码（如：视频电话、离校通知等）
   * @returns {Promise} 返回服务状态
   *
   * 返回数据格式:
   * ssCode = 0 时:
   * {
   *   jsfsm: '计数方式码',
   *   zdsc: 最大时长,
   *   zdll: 最大流量,
   *   zdcs: 最大次数,
   *   ljsc: 累计时长,
   *   ljll: 累计流量,
   *   ljcs: 累计次数,
   *   sfmf: 是否免费,
   *   sfty: 是否停用
   * }
   * ssCode > 0 时:
   * {
   *   ssMsg: '错误信息'
   * }
   */
  grfw_chkGrfw() {
    return deviceRequest.post(
      `/service?ssServ=grfw_chkGrfw`,
      {},
      {
        loading: false,
        formData: true
      }
    )
  },

  /**
   * 办结个人服务（通话结束后调用）
   * @param {object} data - 办结参数
   * @param {string} data.grfwxmm - 个人服务项目码
   * @param {number} data.sc - 时长（秒/分钟）
   * @param {number} data.ll - 流量
   * @param {string} data.ms - 附言/备注
   * @returns {Promise} 返回办结后的服务状态
   *
   * 返回数据格式:
   * ssCode = 0 时:
   * {
   *   jsfsm: '计数方式码',
   *   zdsc: 最大时长,
   *   zdll: 最大流量,
   *   zdcs: 最大次数,
   *   ljsc: 累计时长,
   *   ljll: 累计流量,
   *   ljcs: 累计次数,
   *   sfmf: 是否免费
   * }
   * ssCode > 0 时:
   * {
   *   ssMsg: '错误信息'
   * }
   */
  grfw_endGrfw(data) {
    return deviceRequest.post(
      `/service?ssServ=grfw_endGrfw`,
      data,
      {
        loading: false,
        formData: true
      }
    )
  }
}
