/* eslint-disable */
import axios, { AxiosInstance, AxiosResponse } from 'axios'
import qs from 'qs'

export interface ObjectType {
  [key: string]: any;
}

export interface Config {
  $domain?: string;
  $config?: any;
}

export interface Parameters {
  [key: string]: any;
}

let domain = ''
let axiosInstance = axios.create()
export function getDomain(): string {
  return domain
}
export function setDomain($domain: string): void {
  domain = $domain
}
export function getAxiosInstance(): AxiosInstance {
  return axiosInstance
}
export function setAxiosInstance($axiosInstance: AxiosInstance): void {
  axiosInstance = $axiosInstance
}
type RequestMethod = 'get' | 'post' | 'put' | 'delete' | 'head' | 'option' | 'patch'
export function request(method: RequestMethod, url: string, body?: ObjectType, config: ObjectType = {}) {
  let queryUrl = url
  if (method === 'delete') {
    return axiosInstance[method](queryUrl,{...config, data: body || {} })
  } else if (method === 'get') {
    let params = body ? qs.stringify(body) : ''
    if (params) {
      if (queryUrl.indexOf('?') < 0) {
        params = '?' + params
      } else if (!queryUrl.endsWith('?')) {
        params = '&' + params
      }
    }
    return axiosInstance[method](queryUrl + params, config)
  } else if(method === 'post' || method === 'put' || method === 'patch'){
    return axiosInstance[method](queryUrl, body, config)
  } else if (method === 'head' || method === 'option') {
    return axiosInstance[method](queryUrl, config)
  }
}

// 公共响应对象<T>
export interface 公共响应对象<T> {
  data?: T; // 业务数据
  errorCode?: string; // 错误码
  errorMsg?: string; // 错误信息
  status?: boolean; // 响应状态
}

// 参与活动状态
export interface 参与活动状态 {
  isFirst?: boolean; // 是否首次加入 true是 false否
  isJoin?: number; // 0-未加入 1-已加入 2-加入已退出
}

// 参与退出请求
export interface 参与退出请求 {
  activityId: string; // 活动id
  check: number; // 0-参与 1-退出
  mobile: string; // 用户手机号码
  userId: string; // 用户id
  vin: string; // 车架号
}

// 基础校验
export interface 基础校验 {
  activityId: string; // 活动id
  mobile: string; // 用户手机号码
  userId: string; // 用户id
}

// 持续天数
export interface 持续天数 {
  day?: number; // 持续天数
  isShow?: boolean; // 是否展示弹窗
  nxtPoint?: string; // 明日继续打卡的积分
  point?: string; // 增加的积分
}

// 排行榜
export interface 排行榜 {
  avatar?: string; // 用户头像
  isOwn?: boolean; // 是否用户自己排名
  nickName?: string; // 昵称
  order?: number; // 排名
  point?: string; // 积分
  userName?: string; // 用户名
}

// 权益信息
export interface 权益信息 {
  code?: string; // 权益兑换码和APP积分值
  exchange?: string; // 兑换链接
  expireTime?: string; // 过期日期
  isCurrent?: boolean; // 是否当月权益
  isDraw?: boolean; // 是否领取权益
  isExpire?: boolean; // 是否过期
  isLocked?: boolean; // 是否解锁 false:解锁
  isUsed?: boolean; // 是否已经使用
  name?: string; // 权益名称
  picUrl?: string; // 权益的图片地址
  poolNum?: string; // 权益的库存数量
  rightId?: string; // 权益id
  type?: number; // 权益类型 0-mosi 1-ubi 2-app积分 3-1元购
  unlockNum?: string; // 解锁需要的分数
  unlockTime?: string; // 解锁日期
}

// 权益明细
export interface 权益明细 {
  code?: string; // 权益兑换码和APP积分值
  exchange?: string; // 兑换链接
}

// 活动状态查询
export interface 活动状态查询 {
  activityId: string; // 活动id
  mobile: string; // 用户手机号码
  userId: string; // 用户id
  vin: string; // 车架号
}

// 用户信息<T>
export interface 用户信息<T> {
  avatar?: string; // 用户头像
  nickName?: string; // 用户昵称
  vehicles?: Array<T>; // 车辆列表
}

// 用户信息查询
export interface 用户信息查询 {
  activityId: string; // 活动id
  mobile: string; // 用户手机号码
  userId: string; // 用户id
}

// 车辆信息
export interface 车辆信息 {
  isTest?: boolean; // 是否试驾车辆 true:试驾车
  modelName?: string; // 车型名称
  nickName?: string; // 市场名称+车架后四位
  seriesName?: string; // 车系名称
  type?: number; // 车辆类型 0-自有车 1-授权车
  vin?: string; // 车架号
}

// 车辆收益查询实体
export interface 车辆收益查询实体 {
  avgSocScore?: string; // 平均soc评分
  avgSpeed?: string; // 平均时速
  avgSpeedScore?: string; // 平均时速评分
  commonProfit?: string; // 保险权益兑换额度
  duration?: string; // 驾驶时长
  lastProfit?: string; // 昨日收益
  maxSpeed?: string; // 最高时速
  monthAward?: string; // 当月奖励收益
  monthDrive?: string; // 当月驾驶收益
  overSpeedScore?: string; // 超速评分
  points?: string; // 驾驶评分
  pointsMsg?: string; // 评分评语
  rank?: number; // 优驾之星排名
  tripOdoScore?: string; // 行驶里程评分
  tripTimeScore?: string; // 行驶时间评分
  tripTimesScore?: string; // 行驶次数评分
  vin?: string; // 车架号
}

// 车辆收益查询请求
export interface 车辆收益查询请求 {
  activityId: string; // 活动id
  mobile: string; // 用户手机号码
  userId: string; // 用户id
  vin: string; // 车架号
}

// 车辆收益记录列表查询
export interface 车辆收益记录列表查询 {
  activityId: string; // 活动id
  mobile: string; // 用户手机号码
  pageNum: number; // 页码,从1开始
  pageSize?: number; // 默认展示条数,缺省10条
  userId: string; // 用户id
  vin: string; // 车架号
}

// 车辆收益记录查询<T>
export interface 车辆收益记录查询<T> {
  createTime?: string; // 发生日期
  details?: Array<T>; // 收益记录
}

// 车辆收益详细记录
export interface 车辆收益详细记录 {
  income?: string; // 收益积分,负数表示减少
  message?: string; // 描述文案
}

// 车辆权益查询
export interface 车辆权益查询 {
  activityId: string; // 活动id
  mobile: string; // 用户手机号码
  userId: string; // 用户id
  vin: string; // 车架号
}

// 领取权益
export interface 领取权益 {
  activityId: string; // 活动id
  mobile: string; // 用户手机号码
  rightId?: string; // 权益id
  userId: string; // 用户id
  vin: string; // 车架号
}


export interface JoinActivitycheckActivityParameters {
  checkStatus: 参与退出请求; // checkStatus
}

/**
 * @name: JoinActivitycheckActivity
 * @date: 2022/1/21
 * @description: 参加退出活动(隐私协议)
 * @param: {checkStatus} [参与退出请求]
 * @return: Promise<AxiosResponse<公共响应对象<any>>>
 */
export function JoinActivitycheckActivity(parameters: Config & JoinActivitycheckActivityParameters): Promise<AxiosResponse<公共响应对象<any>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/activities/check-status'

  return request('post', host + path, body, $config)
}

export interface JoinActivitygetUserInfoParameters {
  userInfoQuery: 用户信息查询; // userInfoQuery
}

/**
 * @name: JoinActivitygetUserInfo
 * @date: 2022/1/21
 * @description: 获取首页用户信息
 * @param: {userInfoQuery} [用户信息查询]
 * @return: Promise<AxiosResponse<公共响应对象<用户信息<车辆信息>>>>
 */
export function JoinActivitygetUserInfo(parameters: Config & JoinActivitygetUserInfoParameters): Promise<AxiosResponse<公共响应对象<用户信息<车辆信息>>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/activities/getUserInfo'

  return request('post', host + path, body, $config)
}

export interface JoinActivitygetCurrentActivityParameters {
  joinStatusQuery: 活动状态查询; // joinStatusQuery
}

/**
 * @name: JoinActivitygetCurrentActivity
 * @date: 2022/1/21
 * @description: 获取参与状态
 * @param: {joinStatusQuery} [活动状态查询]
 * @return: Promise<AxiosResponse<公共响应对象<参与活动状态>>>
 */
export function JoinActivitygetCurrentActivity(parameters: Config & JoinActivitygetCurrentActivityParameters): Promise<AxiosResponse<公共响应对象<参与活动状态>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/activities/join-status'

  return request('post', host + path, body, $config)
}

export interface JoinActivityrefreshVehParameters {
  baseCheck: 基础校验; // baseCheck
}

/**
 * @name: JoinActivityrefreshVeh
 * @date: 2022/1/21
 * @description: 刷新用户车辆列表
 * @param: {baseCheck} [基础校验]
 * @return: Promise<AxiosResponse<公共响应对象<boolean>>>
 */
export function JoinActivityrefreshVeh(parameters: Config & JoinActivityrefreshVehParameters): Promise<AxiosResponse<公共响应对象<boolean>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/activities/refreshVeh'

  return request('post', host + path, body, $config)
}

export interface MedallastParameters {
  baseCheck: 基础校验; // baseCheck
}

/**
 * @name: Medallast
 * @date: 2022/1/21
 * @description: 获取连续第几天的弹窗信息
 * @param: {baseCheck} [基础校验]
 * @return: Promise<AxiosResponse<公共响应对象<持续天数>>>
 */
export function Medallast(parameters: Config & MedallastParameters): Promise<AxiosResponse<公共响应对象<持续天数>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/medal/last'

  return request('post', host + path, body, $config)
}

export interface ProfitgetProfitListParameters {
  profitRecordQuery: 车辆收益记录列表查询; // profitRecordQuery
}

/**
 * @name: ProfitgetProfitList
 * @date: 2022/1/21
 * @description: 获取收益明细记录
 * @param: {profitRecordQuery} [车辆收益记录列表查询]
 * @return: Promise<AxiosResponse<公共响应对象<Array<车辆收益记录查询<车辆收益详细记录>>>>>
 */
export function ProfitgetProfitList(parameters: Config & ProfitgetProfitListParameters): Promise<AxiosResponse<公共响应对象<Array<车辆收益记录查询<车辆收益详细记录>>>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/profit/getProfitList'

  return request('post', host + path, body, $config)
}

export interface ProfitgetAvgTopNParameters {
  baseCheck: 基础校验; // baseCheck
}

/**
 * @name: ProfitgetAvgTopN
 * @date: 2022/1/21
 * @description: 获取优驾之星排行榜
 * @param: {baseCheck} [基础校验]
 * @return: Promise<AxiosResponse<公共响应对象<Array<排行榜>>>>
 */
export function ProfitgetAvgTopN(parameters: Config & ProfitgetAvgTopNParameters): Promise<AxiosResponse<公共响应对象<Array<排行榜>>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/profit/getTopN'

  return request('post', host + path, body, $config)
}

export interface ProfitgetTotalTopNParameters {
  baseCheck: 基础校验; // baseCheck
}

/**
 * @name: ProfitgetTotalTopN
 * @date: 2022/1/21
 * @description: 获取月度累积排行榜
 * @param: {baseCheck} [基础校验]
 * @return: Promise<AxiosResponse<公共响应对象<Array<排行榜>>>>
 */
export function ProfitgetTotalTopN(parameters: Config & ProfitgetTotalTopNParameters): Promise<AxiosResponse<公共响应对象<Array<排行榜>>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/profit/getTotalTopN'

  return request('post', host + path, body, $config)
}

export interface ProfitgetVehicleProfitParameters {
  vehicleProfitQuery: 车辆收益查询请求; // vehicleProfitQuery
}

/**
 * @name: ProfitgetVehicleProfit
 * @date: 2022/1/21
 * @description: 获取车辆收益信息(首页)
 * @param: {vehicleProfitQuery} [车辆收益查询请求]
 * @return: Promise<AxiosResponse<公共响应对象<车辆收益查询实体>>>
 */
export function ProfitgetVehicleProfit(parameters: Config & ProfitgetVehicleProfitParameters): Promise<AxiosResponse<公共响应对象<车辆收益查询实体>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/profit/getVehicleProfit'

  return request('post', host + path, body, $config)
}

export interface RightdrawParameters {
  drawRights: 领取权益; // drawRights
}

/**
 * @name: Rightdraw
 * @date: 2022/1/21
 * @description: 领取权益
 * @param: {drawRights} [领取权益]
 * @return: Promise<AxiosResponse<公共响应对象<Array<权益明细>>>>
 */
export function Rightdraw(parameters: Config & RightdrawParameters): Promise<AxiosResponse<公共响应对象<Array<权益明细>>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/rights/draw'

  return request('post', host + path, body, $config)
}

export interface RightgetRightsParameters {
  vehicleRightsQuery: 车辆权益查询; // vehicleRightsQuery
}

/**
 * @name: RightgetRights
 * @date: 2022/1/21
 * @description: 获取权益列表
 * @param: {vehicleRightsQuery} [车辆权益查询]
 * @return: Promise<AxiosResponse<公共响应对象<Array<权益信息>>>>
 */
export function RightgetRights(parameters: Config & RightgetRightsParameters): Promise<AxiosResponse<公共响应对象<Array<权益信息>>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/rights/getRights'

  return request('post', host + path, body, $config)
}