import request from '@/service/request'

/**
 * 此函数根据给定的查询参数检索转发规则列表。
 * @param params - `params` 参数是一个 `IOT.API.RULE.QueryParams` 类型的对象，它包含 API
 * 请求的查询参数以检索转发规则列表。这些参数可能包括页码、页面大小、排序标准和过滤标准等内容。
 * @returns `getForwardRuleList` 函数返回一个解析为 `IOT.API.RULE.Rule` 对象数组的 Promise。通过使用指定 URL、HTTP 方法和 API
 * 请求的查询参数的对象调用“request”函数来返回 Promise。
 */
export const getForwardRulePage = (params: IOT.API.RULE.ForwardRuleQueryParams) => {
  return request<IOT.API.RULE.ForwardRule[]>({
    url: '/forwardRule/page',
    method: 'GET',
    params
  })
}

/**
 * 此函数发送一个 POST 请求以添加具有给定数据的转发规则。
 * @param data -
 * 参数“data”是一个类型为“IOT.API.RULE.ForwardRuleQueryParams”的对象，其中包含创建转发规则所需的数据。此数据可能包括规则的源地址和目标地址、端口和协议等信息。
 * @returns `addForwardRule` 函数返回一个解析为字符串的 Promise。
 */
export const addForwardRule = (data: IOT.API.RULE.ForwardRuleBody) => {
  return request<string>({
    url: '/forwardRule',
    method: 'POST',
    data
  })
}

/**
 * 此函数使用 GET 请求通过其 ID 检索转发规则。
 * @param {string} id - `id` 参数是一个字符串，表示转发规则的唯一标识符。此函数使用此标识符发出 GET 请求以检索具有指定“id”的转发规则。
 * @returns 正在返回一个名为 getForwardById 的函数。此函数采用字符串参数“id”，并使用“request”函数向“/forwardRule/”端点发出 GET 请求。
 * `request` 函数返回解析为字符串的 Promise。
 */
export const getForwardById = (id: string) => {
  return request<IOT.API.RULE.ForwardRule>({
    url: `/forwardRule/${id}`,
    method: 'GET'
  })
}

/**
 * 此函数使用 PUT 请求更新转发规则。
 * @param data - `data` 参数是 `IOT.API.RULE.ForwardRuleQueryParams` 类型的对象，其中包含更新转发规则所需的信息。此对象可能包含规则
 * ID、源地址和目标地址以及转发规则的任何其他相关配置选项等属性
 * @returns `updateForward` 函数返回一个解析为字符串的 Promise。
 */
export const updateForward = (data: IOT.API.RULE.ForwardRuleQueryParams) => {
  return request<string>({
    url: '/forwardRule',
    method: 'PUT',
    data
  })
}

/**
 * 函数 delForward 发送删除请求以删除具有指定 ID 的转发规则。
 * @param {string} id - `id`参数是一个字符串，表示需要删除的转发规则的唯一标识。
 * @returns `delForward` 函数返回一个解析为字符串的 Promise。该字符串表示在向“/forwardRule/”端点发送 DELETE 请求后服务器的响应。
 */
export const delForward = (id: string) => {
  return request<string>({
    url: `/forwardRule/${id}`,
    method: 'DELETE'
  })
}

/**
 * 此函数发送 GET 请求以根据提供的状态参数检索转发规则的计数。
 * @param {boolean} status - `status` 参数是一个布尔值，用作过滤器以检索活动或非活动转发规则的计数。如果 `status` 为
 * `true`，函数将返回活跃转发规则的计数，如果 `status` 为 `false`，则返回
 * @returns 函数 getForwardCount 返回解析为数字的
 * Promise。该数字表示具有指定状态的转发规则的计数。通过以指定状态作为参数向“/forwardRule/count”端点发出 GET 请求来获取计数。
 */
export const getForwardCount = (status?: boolean) => {
  return request<any>({
    url: '/forwardRule/count',
    method: 'GET',
    params: { status }
  })
}

export const forwardDebug = (data: {
  'ruleId':'xx' // 规则id 必须
  'modelId':'模型id' // 必须
  'deviceId':'设备id' // 必须
  'sessionEvent':''// 设备连接状态 CONNECT 连接。DISCONNECT 断开连接
  'payload':[] // 数据
  }) => {
  return request<number>({
    url: '/forwardRule/debug',
    method: 'POST',
    data
  })
}

export const linkDebug = (data: {
  'ruleId':'xx' // 规则id 必须
  'modelId':'模型id' // 必须
  'deviceId':'设备id' // 必须
  'sessionEvent':''// 设备连接状态 CONNECT 连接。DISCONNECT 断开连接
  'payload':[] // 数据
  }) => {
  return request<number>({
    url: '/link/debug',
    method: 'POST',
    data
  })
}

/**
 * 此函数使用 PUT 请求更新转发规则的状态。
 * @param params - `params` 对象包含两个属性：
 * @returns 函数 updateForwardStatus 返回一个解析为数字的 Promise。
 */
export const updateForwardStatus = (params: {id: string, status: boolean}) => {
  return request<number>({
    url: '/forwardRule/status',
    method: 'PUT',
    params
  })
}

export const addLink = (data: IOT.API.RULE.LinkRuleBody) => {
  return request<IOT.API.RULE.LinkRule[]>({
    url: '/linkRule',
    method: 'POST',
    data
  })
}

export const getLinkPageById = (id: string) => {
  return request<IOT.API.RULE.LinkRule>({
    url: `/linkRule/${id}`,
    method: 'GET'
  })
}

export const getLinkPage = (params: {page: number, pageSize: number, ruleLabel?: string}) => {
  return request<IOT.API.RULE.LinkRule[]>({
    url: '/linkRule/page',
    method: 'GET',
    params
  })
}

export const getLinkCount = (params?: {status: boolean}) => {
  return request<any>({
    url: '/linkRule/count',
    method: 'GET',
    params
  })
}

export const updateLinkStatus = (data: {status: boolean, id: string}) => {
  return request<number>({
    url: `/linkRule/status?status=${data.status}&id=${data.id}`,
    method: 'PUT'
  })
}

export const delLink = (id: string) => {
  return request<number>({
    url: `/linkRule/${id}`,
    method: 'DELETE'
  })
}

export const updateLink = (data: IOT.API.RULE.LinkRuleBody) => {
  return request<number>({
    url: '/linkRule',
    method: 'PUT',
    data
  })
}
