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

// 静态资源模块声明
declare module '*.png' {
  const content: string;
  export default content;
}
declare module '*.gif' {
  const content: string;
  export default content;
}
declare module '*.jpg' {
  const content: string;
  export default content;
}
declare module '*.jpeg' {
  const content: string;
  export default content;
}
declare module '*.svg' {
  const content: string;
  export default content;
}
declare module '*.css' {
  const content: Record<string, string>;
  export default content;
}
declare module '*.less' {
  const content: Record<string, string>;
  export default content;
}
declare module '*.scss' {
  const content: Record<string, string>;
  export default content;
}
declare module '*.sass' {
  const content: Record<string, string>;
  export default content;
}
declare module '*.styl' {
  const content: Record<string, string>;
  export default content;
}

// 环境变量类型定义
declare namespace NodeJS {
  interface ProcessEnv {
    /** NODE 内置环境变量, 会影响到最终构建生成产物 */
    NODE_ENV: 'development' | 'production' | 'test';
    /** 当前构建的平台 */
    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;
    /** API基础URL */
    API_BASE_URL?: string;
    /** 应用名称 */
    APP_NAME?: string;
    /** 调试模式 */
    DEBUG?: string;
  }
}

// 全局常量类型定义
declare const API_BASE_URL: string;
declare const APP_NAME: string;
declare const DEBUG: string;

// 基础类型定义
declare global {
  /** 通用ID类型 */
  type ID = string | number;

  /** 时间戳类型 */
  type Timestamp = number;

  /** 可选的字符串或数字 */
  type StringOrNumber = string | number;

  /** 分页参数基础类型 */
  interface BasePaginationParams {
    page?: number;
    limit?: number;
    sort?: string;
    order?: 'asc' | 'desc';
  }

  /** 分页响应基础类型 */
  interface BasePaginationResponse<T = any> {
    list: T[];
    count: number;
    page?: number;
    limit?: number;
    totalPages?: number;
  }

  /** API响应基础类型 */
  interface BaseApiResponse<T = any> {
    code: number;
    message?: string;
    data?: T;
    timestamp?: Timestamp;
  }

  /** 基础实体类型 */
  interface BaseEntity {
    id?: ID;
    createTime?: string;
    updateTime?: string;
    createBy?: string;
    updateBy?: string;
  }

  /** 树形结构基础类型 */
  interface BaseTreeNode<T = any> {
    id: ID;
    parentId?: ID;
    children?: T[];
    level?: number;
  }

  /** 选项类型 */
  interface Option<T = StringOrNumber> {
    label: string;
    value: T;
    disabled?: boolean;
    children?: Option<T>[];
  }

  /** 文件上传类型 */
  interface UploadFile {
    uid: string;
    name: string;
    status: 'uploading' | 'done' | 'error';
    url?: string;
    size?: number;
    type?: string;
  }

  /** 地址信息类型 */
  interface AddressInfo {
    province: string;
    city: string;
    district: string;
    detail: string;
    postalCode?: string;
    longitude?: number;
    latitude?: number;
  }

  /** 联系信息类型 */
  interface ContactInfo {
    name: string;
    phone: string;
    email?: string;
  }
}
