declare namespace Api {
  /** 字典管理类型 */
  namespace Dictionary {
    /** 字典作用域 */
    enum DictionaryScope {
      System = 1,
      Business = 2
    }

    /** 导入冲突处理模式 */
    enum ConflictResolutionMode {
      Skip = 1,
      Overwrite = 2,
      Append = 3
    }

    /** 缓存失效操作类型 */
    enum CacheInvalidationOperation {
      Create = 1,
      Update = 2,
      Delete = 3
    }

    /** 字典分组 */
    interface DictionaryGroupDto {
      id: string
      tenantId: string
      code: string
      name: string
      scope: DictionaryScope
      allowOverride: boolean
      isEnabled: boolean
      description?: string | null
      createdAt: string
      updatedAt?: string | null
      rowVersion: string
      items?: DictionaryItemDto[]
    }

    /** 字典项 */
    interface DictionaryItemDto {
      id: string
      groupId: string
      key: string
      value: Record<string, string>
      isDefault: boolean
      isEnabled: boolean
      sortOrder: number
      description?: string | null
      source: 'system' | 'tenant'
      rowVersion: string
    }

    /** 覆盖配置 */
    interface OverrideConfigDto {
      tenantId: string
      systemDictionaryGroupCode: string
      overrideEnabled: boolean
      hiddenSystemItemIds: string[]
      customSortOrder: Record<string, number>
    }

    /** 字典导入错误 */
    interface DictionaryImportError {
      rowNumber: number
      field: string
      message: string
    }

    /** 字典导入结果 */
    interface DictionaryImportResultDto {
      successCount: number
      skipCount: number
      errorCount: number
      errors: DictionaryImportError[]
      duration: string
    }

    /** 缓存失效日志 */
    interface CacheInvalidationLogDto {
      id: string
      tenantId: string
      timestamp: string
      dictionaryCode: string
      scope: DictionaryScope
      affectedCacheKeyCount: number
      operatorId: string
      operation: CacheInvalidationOperation
    }

    /** 字典分组查询参数 */
    interface DictionaryGroupQueryParams extends Api.Common.PageParams {
      scope?: DictionaryScope
      keyword?: string
      isEnabled?: boolean
      sortBy?: string
      sortOrder?: 'asc' | 'desc'
      includeItems?: boolean
    }

    /** 创建字典分组 */
    interface CreateDictionaryGroupRequest {
      code: string
      name: string
      scope: DictionaryScope
      allowOverride: boolean
      description?: string | null
    }

    /** 更新字典分组 */
    interface UpdateDictionaryGroupRequest {
      name: string
      description?: string | null
      allowOverride: boolean
      isEnabled: boolean
      rowVersion: string
    }

    /** 创建字典项 */
    interface CreateDictionaryItemRequest {
      key: string
      value: Record<string, string>
      isDefault?: boolean
      isEnabled?: boolean
      sortOrder?: number
      description?: string | null
    }

    /** 更新字典项 */
    interface UpdateDictionaryItemRequest {
      key: string
      value: Record<string, string>
      isDefault?: boolean
      isEnabled?: boolean
      sortOrder?: number
      description?: string | null
      rowVersion: string
    }

    /** 导出请求 */
    interface DictionaryExportRequest {
      format?: 'csv' | 'json'
    }

    /** 覆盖隐藏项请求 */
    interface DictionaryOverrideHiddenItemsRequest {
      hiddenItemIds: string[]
    }

    /** 覆盖排序请求 */
    interface DictionaryOverrideSortOrderRequest {
      sortOrder: Record<string, number>
    }

    /** 批量查询请求 */
    interface DictionaryBatchQueryRequest {
      codes: string[]
    }

    // ==================== 标签覆盖相关类型 ====================

    /** 覆盖类型枚举 */
    enum OverrideType {
      /** 租户定制（租户覆盖系统字典） */
      TenantCustomization = 1,
      /** 平台强制（平台覆盖租户字典） */
      PlatformEnforcement = 2
    }

    /** 标签覆盖 DTO */
    interface LabelOverrideDto {
      /** 覆盖记录 ID */
      id: string
      /** 租户 ID */
      tenantId: string
      /** 被覆盖的字典项 ID */
      dictionaryItemId: string
      /** 字典项 Key */
      dictionaryItemKey: string
      /** 原始显示值（多语言） */
      originalValue: Record<string, string>
      /** 覆盖后的显示值（多语言） */
      overrideValue: Record<string, string>
      /** 覆盖类型 */
      overrideType: OverrideType
      /** 覆盖类型名称 */
      overrideTypeName: string
      /** 覆盖原因/备注 */
      reason?: string | null
      /** 创建时间 */
      createdAt: string
      /** 更新时间 */
      updatedAt?: string | null
      /** 创建人 ID */
      createdBy?: string | null
      /** 更新人 ID */
      updatedBy?: string | null
    }

    /** 创建/更新标签覆盖请求 */
    interface UpsertLabelOverrideRequest {
      /** 被覆盖的字典项 ID */
      dictionaryItemId: string
      /** 覆盖后的显示值（多语言） */
      overrideValue: Record<string, string>
      /** 覆盖原因/备注（平台强制覆盖时建议填写） */
      reason?: string | null
    }

    /** 批量标签覆盖请求 */
    interface BatchLabelOverrideRequest {
      items: UpsertLabelOverrideRequest[]
    }
  }
}
