/// <reference types="@tarojs/taro" />

declare module '*.png';
declare module '*.gif';
declare module '*.jpg';
declare module '*.jpeg';
declare module '*.svg';
declare module '*.css';
declare module '*.less';
declare module '*.scss';
declare module '*.sass';
declare module '*.styl';

declare namespace NodeJS {
  interface ProcessEnv {
    /** NODE 内置环境变量, 会影响到最终构建生成产物 */
    NODE_ENV: 'development' | 'production',
    /** 当前构建的平台 */
    TARO_ENV: 'weapp' | 'swan' | 'alipay' | 'h5' | 'rn' | 'tt' | 'quickapp' | 'qq' | 'jd'
    /**
     * 当前构建的小程序 appid
     * @description 若不同环境有不同的小程序，可通过在 env 文件中配置环境变量`TARO_APP_ID`来方便快速切换 appid， 而不必手动去修改 dist/project.config.json 文件
     * @see https://taro-docs.jd.com/docs/next/env-mode-config#特殊环境变量-taro_app_id
     */
    TARO_APP_ID: string
    /** 后台服务接口地址 **/
    TARO_APP_BASE_API: string
  }
}

declare module '@tarojs/components' {
  export * from '@tarojs/components/types/index.vue3'
}

/**
 * 微信小程序用户身份
 */
type MiniProgramUserIdentity = 'police' | 'project_manager'

/**
 * 选择
 */
interface SelectNodeVo<T, E = Record<string, any>> {
  value: T;
  label: string;
  orderIndex?: number;
  disabled?: boolean;
  extData?: E
}

/**
 * 树
 */
interface TreeNodeVo<T, E = Record<string, any>> {
  value: T;
  parentValue: T;
  label: string;
  orderIndex?: number;
  children?: TreeNodeVo<T>[]
  extData?: E;
}

/**
 * 全局状态返回
 */
interface JsonResult<T> {
  code: number;
  data?: T;
  message: string;
}

/**
 * 分页对象
 */
interface PagerVo<T> {
  size: number,
  total: number;
  current: number;
  records: T[]
}

/**
 * token信息
 */
interface TokenInfo {
  /** token名称 **/
  name: string;
  /** token值 **/
  value: string;
  /** 拓展属性 **/
  extData: {
    /** 身份 **/
    identity: BaseEnum<MiniProgramUserIdentity>
  }
}

/**
 * 基本枚举类型
 */
interface BaseEnum<T, E = Record<string, any>> {
  value: T;
  label: string;
  extData: E;
}

interface StandardList {
  ckItemId: string
  deductionPoints: number
  name: string
  snowFlakeId: string
  isSelected: boolean
}
interface ItemList {
  ckGroupId: string
  name: string
  remark: string
  snowFlakeId: string
  standardList: StandardList[]
  type: { value: string; label: string }
  selectedID: string
  selected_points: number
  selectedGroup: any[]
}
interface StarRating {
  itemList: ItemList[]
  name: string
  remark: string
  snowFlakeId: string
  totalScore: number
  currentScore: number
}
interface UnitEnterprisesUnitList {
  label: string
  value: string
  extData: {
    type: {
      label: string
      value: string
    }
  }
}
interface CkProjectListByType {
  label: string
  value: string
  extData: {
    createTime: string
    remark: string
    totalScore: number
    type: {
      label: string
      value: string
    }
  }
}
interface Item {
  itemList: any[] // 根据实际情况调整类型
  snowFlakeId: string
}
