import { AxiosInstance } from 'axios';

type ISuccessResponse = Record<string, any>;

interface IErrorResponse {
  code: number;
  msg: string;
}

/** 积分类型 */
declare enum Type {
  /** 新增 */
  Increase = 1001,
  /** 减少 */
  Decrease = 1002,
  /** 冻结 */
  Freeze = 1003,
  /** 解冻 */
  UnFreeze = 1004,
  /** 扣减冻结的积分 */
  DecreaseFreeze = 1005,
}

export declare const request: AxiosInstance;

export declare interface IUserInfo {
  accessToken: string;
  address: string;
  email: string;
  fileFlag: number;
  fileId: string;
  id: number;
  login2fa: number;
  loginType: number;
  name: string;
  platform: number;
  reBindTime: number;
  refreshToken: string;
  solanaAddress: string;
  state: number;
  token: string;
  tokenPwd: string;
  updateTime: number;
  utype: number;
  ico?: string;
}

export declare function getAppleAuthToken(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function sendSms(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function loginByPassword(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function loginByAppleID(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function loginByGoogle(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function iCloudProxy(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function updateUserInfo(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function getUserInfo(): Promise<IUserInfo | IErrorResponse>;

export declare function getFilePwd(
  code?: string,
): Promise<ISuccessResponse | IErrorResponse>;

export declare function clearAuthId(
  code: string,
): Promise<ISuccessResponse | IErrorResponse>;

export declare function getBindQrCode(): Promise<
  ISuccessResponse | IErrorResponse
>;

export declare function doCodeCheck(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function getFilePwdMsg(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function logout(): Promise<ISuccessResponse | IErrorResponse>;

export declare function jwtValidate(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function refreshToken(
  data: string[],
): Promise<IUserInfo | IErrorResponse>;

export declare function initRequestQuery(token: string): void;

export declare function initApiDomain(domain: string): void;

export declare function getAddrKey(): Promise<
  ISuccessResponse | IErrorResponse
>;

export declare function getAirdrop(): Promise<
  ISuccessResponse | IErrorResponse
>;

export declare function check2FA(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function switch2FALogin(
  sw: boolean,
): Promise<ISuccessResponse | IErrorResponse>;

export declare function getChainKeys(
  data: string[],
): Promise<ISuccessResponse | IErrorResponse>;

export declare function getFSLPoints(): Promise<
  | {
      bits: number;
      gasHeroFlag: boolean;
      mooarFlag: boolean;
      mooar_name: string;
      mooar_uid: string;
      mooar_wallet_addresses: string;
      pointC: number;
      pointF: number;
      pointMap: {
        id: number;
        uid: number;
        platform: number;
        type: number;
        totalPoint: number;
        costPoint: number;
        freezePoint: number;
      }[];

      pointT: number;
      stepnEmail: string;
    }
  | IErrorResponse
>;

export declare function bindStepnEmail(data: {
  email: string;
  captcha: string;
}): Promise<ISuccessResponse | IErrorResponse>;

export declare function reBindStepnEmail(data: {
  email: string;
  captcha: string;
}): Promise<ISuccessResponse | IErrorResponse>;

export declare function getTokenPrice(): Promise<
  ISuccessResponse | IErrorResponse
>;

export declare function getPointList(params: any): Promise<
  | {
      balance: number;
      ctime: number;
      id: number;
      note: string;
      num: number;
      platform: number;
      str1: string;
      str2: string;
      type: Type;
      uid: number;
      v1: number;
      v2: number;
    }[]
  | IErrorResponse
>;

export declare function checkAddr(
  address: string,
): Promise<ISuccessResponse | IErrorResponse>;

export declare function APIProxy(
  method: string,
  params: any,
): Promise<ISuccessResponse | IErrorResponse>;
