/* eslint-disable */
import { requestAdapter } from './a2s.adapter'
import { extract, replacePath } from './a2s.utils'

<% var keyList = []%>
export const services = {
  <% it.apis.forEach(group => {%> 
    <% group.list.forEach(item => {%>
    <% /* 计算api的值 */ %>
    <% var key = it.trimKey(group.name + '@' + item.title)%>
    <% /* api的key有冲突 */ %>
    <% if(keyList.includes(key)) {%>
      <% it.addWarnMessages(`\x1B[33m检测到重复api key: [${key}]，后续接口替换为 group.name@item.method@item.path 格式。\x1B[0m`)%>
      <% key = it.trimKey(group.name + '@' + item.method.toLowerCase() + '@' + item.path)%>
    <% } else { %>
      <% keyList.push(key)%>
    <% } %>
      '<%= key %>'(<%~ include('yapi.args',item)%>){
        return requestAdapter<<%~ include('schema.any', item.res_body) %>>({
          "url": replacePath('<%= item.query_path.path%>',args),
          "method": '<%= item.method.toUpperCase() %>',
          ...extract('<%= item.method.toUpperCase() %>', args, [<% item.req_query.forEach(q => {%>
            '<%= q.name%>',
          <% }) %>], [<% item.req_params.forEach(p => {%>
            '<%= p.name%>',
            <% }) %>])
        })
      },
    <% }) %>
  <% })%>
}

export type ServiceKeys = keyof typeof services

export type ServiceArg<T extends ServiceKeys> = Parameters<typeof services[T]>[0]

export type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T

export type ServiceReturn<T extends ServiceKeys> = Awaited<ReturnType<typeof services[T]>>['data']