export {}
declare global {
  namespace SnConfigTypes {
    type SectionType = 'GuDing' | 'ShiJian' | 'ZiZeng' | 'SuiJi'

    interface Section extends Record<string, any> {
      sectionName: SectionType
      sectionDesc?: string
    }

    interface AddSnConfigParam {
      /**
       * 规则名称
       */
      snname: string
      /**
       * 规则代码
       */
      sncode: string
      /**
       * 备注
       */
      memo: string
      /**
       * 配置参数
       */
      config: Section[]
    }

    interface ModifySnConfigParam {
      id: string
      /**
       * 规则名称
       */
      snname: string
      /**
       * 规则代码
       */
      sncode: string
      /**
       * 备注
       */
      memo: string
      /**
       * 配置参数
       */
      config: Section[]
    }

    interface SnConfigDetail {
      id: string
      /**
       * 规则名称
       */
      snname: string
      /**
       * 规则代码
       */
      sncode: string
      /**
       * 示例
       */
      example: string
      /**
       * 备注
       */
      memo: string
      /**
       * 配置参数
       */
      config: Section[]
      configDesc?: string
    }

    interface FixedSectionConfig extends Section {
      sectionName: 'GuDing'
      value: string
    }

    interface TimeSectionConfig extends Section {
      sectionName: 'ShiJian'
      timestamp: boolean
      pattern?: string
      /**
       * 时间单位，1 --> 毫秒，1000-->秒，60000 --> 分，3600000 --> 时，86400000 --> 天
       */
      unit?: 1 | 1000 | 60000 | 3600000 | 86400000
    }

    interface IncSectionConfig extends Section {
      sectionName: 'ZiZeng'
      /**
       * 编码段编号
       */
      code: string
      /**
       * 步长
       */
      step: number
      /**
       * 初始数值
       */
      initialVal: number
      /**
       * 填充模式
       */
      padMode: 'Wu' | 'Zuo' | 'You'
      /**
       * 填充值
       */
      padVal: string
      /**
       * 填充长度
       */
      padLen?: number
      /**
       * 回卷模式
       */
      rollback: 'Wu' | 'Ri' | 'Zhou' | 'Yue' | 'Nian' | 'Pi'
      /**
       * 是否允许溢出
       */
      allowOverflow: boolean
    }

    interface RandomSectionConfig extends Section {
      sectionName: 'SuiJi'
      /**
       * 随机模式
       */
      randomMode: 'Snowflake' | 'NanoId' | 'UUID'
      /**
       * 雪花码-工作节点ID
       */
      workerId?: number
      /**
       * 雪花码-数据中心ID
       */
      datacenterId?: number
      /**
       * NanoId码-大小
       */
      nanoIdSize?: number
    }


    interface SearchSnConfigParam extends G.PageParam {
      /**
       * 规则名称
       */
      snname?: string
      /**
       * 规则代码
       */
      sncode?: string
    }
  }
}
