/* 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)
  }
}

// ActivityLotteryResultVO
export interface ActivityLotteryResultVO {
  awardGrade?: number; // 奖品等级,包括实物和积分
  awardType?: string; // 奖品类型,包括实物和积分
  isAward: boolean; // 是否中奖
  isComplete: boolean; // 是否填写地址等详细信息
  profession?: string; // 选择的职业类型
}

// AwardDetail
export interface AwardDetail {
  awardName: string; // 奖品名称
  awardTime: string; // 中奖时间
  cellStyleMap?: ObjectType;
  identity?: string; // 身份证号码
  mobile: string; // 手机号码
  nickname?: string; // 用户昵称
  postAddress?: string; // 收件人详细地址
  postArea?: string; // 收件人地址省市区
  postMobile?: string; // 收件人电话
  postName?: string; // 收件人姓名
}

// AwardInfoQuery
export interface AwardInfoQuery {
  aid: string; // 用户id
}

// AwardInfoRequest
export interface AwardInfoRequest {
  aid: string; // 用户id
  identity: string; // 身份证号码
  postAddress: string; // 收件详细地址
  postArea: string; // 收件地址省市区
  postMobile: string; // 收件人手机号码
  postName: string; // 收件人姓名
}

// AwardInfoVO
export interface AwardInfoVO {
  identity: string; // 身份证号码
  postAddress?: string; // 收件详细地址
  postArea?: string; // 收件地址省市区
  postMobile: string; // 收件人手机号码
  postName: string; // 收件人姓名
}

// AwardListQuery
export interface AwardListQuery {
  pageNumber: number; // 当前页
  pageSize: number; // 每页记录数
}

// AwardVO
export interface AwardVO {
  activityId?: number; // 奖品的活动ID
  assigned?: number; // 奖品已经分配的数量信息
  awardBackId?: string; // 背景图片Id
  awardBackUrl?: string; // 背景图片链接
  awardDesc?: string; // 奖品描述
  awardGrade?: number; // 奖品等级
  awardId?: number; // 奖品的活动奖项对应的id
  awardName?: string; // 奖品名字
  awardNum?: number; // 奖品数量
  awardTotalNum?: number; // 奖品总数量
  awardType?: number; // 该活动的奖品对应的类型:2实物 3谢谢参与 4积分
  awardTypeName?: string; // 该活动的奖品对应的类型
  awardUrl?: string; // awardUrl
  skuId?: number; // skuId
  skuName?: string; // 商品名称
}

// Color
export interface Color {

}

// CellStyle
export interface CellStyle {
  alignment?: number;
  alignmentEnum?: 'GENERAL' | 'LEFT' | 'CENTER' | 'RIGHT' | 'FILL' | 'JUSTIFY' | 'CENTER_SELECTION' | 'DISTRIBUTED';
  borderBottom?: number;
  borderBottomEnum?: 'NONE' | 'THIN' | 'MEDIUM' | 'DASHED' | 'DOTTED' | 'THICK' | 'DOUBLE' | 'HAIR' | 'MEDIUM_DASHED' | 'DASH_DOT' | 'MEDIUM_DASH_DOT' | 'DASH_DOT_DOT' | 'MEDIUM_DASH_DOT_DOT' | 'SLANTED_DASH_DOT';
  borderLeft?: number;
  borderLeftEnum?: 'NONE' | 'THIN' | 'MEDIUM' | 'DASHED' | 'DOTTED' | 'THICK' | 'DOUBLE' | 'HAIR' | 'MEDIUM_DASHED' | 'DASH_DOT' | 'MEDIUM_DASH_DOT' | 'DASH_DOT_DOT' | 'MEDIUM_DASH_DOT_DOT' | 'SLANTED_DASH_DOT';
  borderRight?: number;
  borderRightEnum?: 'NONE' | 'THIN' | 'MEDIUM' | 'DASHED' | 'DOTTED' | 'THICK' | 'DOUBLE' | 'HAIR' | 'MEDIUM_DASHED' | 'DASH_DOT' | 'MEDIUM_DASH_DOT' | 'DASH_DOT_DOT' | 'MEDIUM_DASH_DOT_DOT' | 'SLANTED_DASH_DOT';
  borderTop?: number;
  borderTopEnum?: 'NONE' | 'THIN' | 'MEDIUM' | 'DASHED' | 'DOTTED' | 'THICK' | 'DOUBLE' | 'HAIR' | 'MEDIUM_DASHED' | 'DASH_DOT' | 'MEDIUM_DASH_DOT' | 'DASH_DOT_DOT' | 'MEDIUM_DASH_DOT_DOT' | 'SLANTED_DASH_DOT';
  bottomBorderColor?: number;
  dataFormat?: number;
  dataFormatString?: string;
  fillBackgroundColor?: number;
  fillBackgroundColorColor?: Color;
  fillForegroundColor?: number;
  fillForegroundColorColor?: Color;
  fillPattern?: number;
  fillPatternEnum?: 'NO_FILL' | 'SOLID_FOREGROUND' | 'FINE_DOTS' | 'ALT_BARS' | 'SPARSE_DOTS' | 'THICK_HORZ_BANDS' | 'THICK_VERT_BANDS' | 'THICK_BACKWARD_DIAG' | 'THICK_FORWARD_DIAG' | 'BIG_SPOTS' | 'BRICKS' | 'THIN_HORZ_BANDS' | 'THIN_VERT_BANDS' | 'THIN_BACKWARD_DIAG' | 'THIN_FORWARD_DIAG' | 'SQUARES' | 'DIAMONDS' | 'LESS_DOTS' | 'LEAST_DOTS';
  fontIndex?: number;
  hidden?: boolean;
  indention?: number;
  index?: number;
  leftBorderColor?: number;
  locked?: boolean;
  quotePrefixed?: boolean;
  rightBorderColor?: number;
  rotation?: number;
  shrinkToFit?: boolean;
  topBorderColor?: number;
  verticalAlignment?: number;
  verticalAlignmentEnum?: 'TOP' | 'CENTER' | 'BOTTOM' | 'JUSTIFY' | 'DISTRIBUTED';
  wrapText?: boolean;
}

// CheckRequest
export interface CheckRequest {
  aid: string; // MS用户id
}

// JoinLotteryRequest
export interface JoinLotteryRequest {
  aid: string; // 用户id
  mobile: string; // 用户手机号
  nickname?: string; // 用户昵称
}

// LoginRequest
export interface LoginRequest {
  appVersion?: string; // 应用版本
  deviceId: string; // 客户端设备唯一标识,或者浏览器端计算浏览器指纹的FPJS
  deviceModel?: string; // 客户端设备型号
  inviter?: string; // 活动邀请人aid
  osVersion?: string; // 操作系统版本
  username: string; // 手机号码
  verificationCode: string; // 短信验证码
}

// LucyDrawRequest
export interface LucyDrawRequest {
  aid: string; // MS用户id
  from?: string; // 渠道来源
  mobile: string; // 手机号码
  nickName?: string; // 用户昵称
  profession: string; // 选择的职业
}

// StatDataVO
export interface StatDataVO {
  click: number; // 点击次数
  join: number; // 参与人数
  newUser?: number; // 新用户数
  oldUser?: number; // 老用户数
  share: number; // 分享次数
}

// StatDetail
export interface StatDetail {
  award?: string; // 获得奖励
  cellStyleMap?: ObjectType;
  from?: string; // 获客渠道
  inviteCount?: number; // 邀请人数
  joinTime: string; // 参与时间
  mobile: string; // 手机号码
  nickname?: string; // 用户昵称
  userType: string; // 用户类型
}

// StatListQuery
export interface StatListQuery {
  mobile?: string; // 手机号码
  pageNumber: number; // 当前页
  pageSize: number; // 每页记录数
}

// UserInfoVO
export interface UserInfoVO {
  accToken?: string; // token
  aid?: string; // MS用户id
}

// VerificationCodeRequest
export interface VerificationCodeRequest {
  appVersion?: string; // 应用版本
  deviceId: string; // 客户端设备唯一标识,或者浏览器端计算浏览器指纹的FPJS
  deviceModel?: string; // 客户端设备型号
  osVersion?: string; // 操作系统版本
  username: string; // 手机号码
}

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

// 奖品列表<T>
export interface 奖品列表<T> {
  awardDetails?: Array<T>; // 中奖详情记录列表
  total: number; // 记录总数
}

// 活动数据<T>
export interface 活动数据<T> {
  statDetailList?: Array<T>; // 活动详情记录列表
  total: number; // 记录总数
}


export interface StatisticsexportParameters {
  opType: number; // 操作类型1-活动数据 2-中奖数据
}

/**
 * @name: Statisticsexport
 * @date: 2022/1/21
 * @description: 导出活动或者中奖数据
 * @param: {opType} [integer]
 * @return: Promise<AxiosResponse<never>>
 */
export function Statisticsexport(parameters: Config & StatisticsexportParameters): Promise<AxiosResponse<never>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/admin/api/v1/statistics/export'

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

/**
 * @name: StatisticsgetAwardData
 * @date: 2022/1/21
 * @description: 获取奖品数量信息
 * @return: Promise<AxiosResponse<公共响应对象<string>>>
 */
export function StatisticsgetAwardData(parameters: Config): Promise<AxiosResponse<公共响应对象<string>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/admin/api/v1/statistics/getAwardData'

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

export interface StatisticsgetAwardListParameters {
  awardListQuery: AwardListQuery; // awardListQuery
}

/**
 * @name: StatisticsgetAwardList
 * @date: 2022/1/21
 * @description: 获取实物中奖信息
 * @param: {awardListQuery} [AwardListQuery]
 * @return: Promise<AxiosResponse<公共响应对象<奖品列表<AwardDetail>>>>
 */
export function StatisticsgetAwardList(parameters: Config & StatisticsgetAwardListParameters): Promise<AxiosResponse<公共响应对象<奖品列表<AwardDetail>>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/admin/api/v1/statistics/getAwardList'

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

/**
 * @name: StatisticsgetStatData
 * @date: 2022/1/21
 * @description: 获取活动统计数据
 * @return: Promise<AxiosResponse<公共响应对象<StatDataVO>>>
 */
export function StatisticsgetStatData(parameters: Config): Promise<AxiosResponse<公共响应对象<StatDataVO>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/admin/api/v1/statistics/getStatData'

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

export interface StatisticsgetStatListParameters {
  statListQuery: StatListQuery; // statListQuery
}

/**
 * @name: StatisticsgetStatList
 * @date: 2022/1/21
 * @description: 获取活动数据列表
 * @param: {statListQuery} [StatListQuery]
 * @return: Promise<AxiosResponse<公共响应对象<活动数据<StatDetail>>>>
 */
export function StatisticsgetStatList(parameters: Config & StatisticsgetStatListParameters): Promise<AxiosResponse<公共响应对象<活动数据<StatDetail>>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/admin/api/v1/statistics/getStatList'

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

export interface CDPInfologinParameters {
  loginRequest: LoginRequest; // loginRequest
}

/**
 * @name: CDPInfologin
 * @date: 2022/1/21
 * @description: 短信验证码登录
 * @param: {loginRequest} [LoginRequest]
 * @return: Promise<AxiosResponse<公共响应对象<UserInfoVO>>>
 */
export function CDPInfologin(parameters: Config & CDPInfologinParameters): Promise<AxiosResponse<公共响应对象<UserInfoVO>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/user/login'

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

export interface CDPInfosendParameters {
  verificationCodeRequest: VerificationCodeRequest; // verificationCodeRequest
}

/**
 * @name: CDPInfosend
 * @date: 2022/1/21
 * @description: 发送短信验证码
 * @param: {verificationCodeRequest} [VerificationCodeRequest]
 * @return: Promise<AxiosResponse<公共响应对象<any>>>
 */
export function CDPInfosend(parameters: Config & CDPInfosendParameters): Promise<AxiosResponse<公共响应对象<any>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/user/sendVerificationCode'

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

export interface LotteryawardInfoParameters {
  awardInfoRequest: AwardInfoRequest; // awardInfoRequest
}

/**
 * @name: LotteryawardInfo
 * @date: 2022/1/21
 * @description: 填写奖品收件信息
 * @param: {awardInfoRequest} [AwardInfoRequest]
 * @return: Promise<AxiosResponse<公共响应对象<any>>>
 */
export function LotteryawardInfo(parameters: Config & LotteryawardInfoParameters): Promise<AxiosResponse<公共响应对象<any>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/userLottery/awardInfo'

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

export interface LotterycheckParameters {
  checkRequest: CheckRequest; // checkRequest
}

/**
 * @name: Lotterycheck
 * @date: 2022/1/21
 * @description: 查询是否中奖
 * @param: {checkRequest} [CheckRequest]
 * @return: Promise<AxiosResponse<公共响应对象<ActivityLotteryResultVO>>>
 */
export function Lotterycheck(parameters: Config & LotterycheckParameters): Promise<AxiosResponse<公共响应对象<ActivityLotteryResultVO>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/userLottery/check'

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

export interface LotterygetInfoParameters {
  awardInfoQuery: AwardInfoQuery; // awardInfoQuery
}

/**
 * @name: LotterygetInfo
 * @date: 2022/1/21
 * @description: 获取奖品收件信息
 * @param: {awardInfoQuery} [AwardInfoQuery]
 * @return: Promise<AxiosResponse<公共响应对象<AwardInfoVO>>>
 */
export function LotterygetInfo(parameters: Config & LotterygetInfoParameters): Promise<AxiosResponse<公共响应对象<AwardInfoVO>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/userLottery/getInfo'

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

export interface LotteryjoinLotteryParameters {
  joinLotteryRequest: JoinLotteryRequest; // joinLotteryRequest
}

/**
 * @name: LotteryjoinLottery
 * @date: 2022/1/21
 * @description: 界面点击参加超级周岁礼
 * @param: {joinLotteryRequest} [JoinLotteryRequest]
 * @return: Promise<AxiosResponse<公共响应对象<any>>>
 */
export function LotteryjoinLottery(parameters: Config & LotteryjoinLotteryParameters): Promise<AxiosResponse<公共响应对象<any>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/userLottery/joinLottery'

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

export interface LotterylucyDrawParameters {
  lucyDrawRequest: LucyDrawRequest; // lucyDrawRequest
}

/**
 * @name: LotterylucyDraw
 * @date: 2022/1/21
 * @description: 用户抽奖
 * @param: {lucyDrawRequest} [LucyDrawRequest]
 * @return: Promise<AxiosResponse<公共响应对象<AwardVO>>>
 */
export function LotterylucyDraw(parameters: Config & LotterylucyDrawParameters): Promise<AxiosResponse<公共响应对象<AwardVO>>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/userLottery/lucyDraw'

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

/**
 * @name: ScoreaddScore
 * @date: 2022/1/21
 * @description: 新增积分同步
 * @return: Promise<AxiosResponse<never>>
 */
export function ScoreaddScore(parameters: Config): Promise<AxiosResponse<never>> {
  const { $config, $domain, ...body} = parameters
  const host = $domain ? $domain : getDomain()
  let path = '/public/api/v1/userScore/addScore'

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