/**
 * Namespace Api
 *
 * All backend api type
 */
declare namespace Api {
  namespace Competition {
    /** common params of paginating */
    interface PaginatingCommonParams {
      /** current page number */
      current: number
      /** page size */
      size: number
      /** total count */
      total: number
    }

    /** common params of paginating query list data */
    interface PaginatingQueryRecord<T = any> extends PaginatingCommonParams {
      records: T[]
    }

    /** common search params of table */
    type CommonSearchParams = Pick<Common.PaginatingCommonParams, 'current' | 'size'>

    /**
     * enable status
     *
     * - "1": enabled
     * - "2": disabled
     */
    type EnableStatus = 1 | 2

    /** question ui type */
    type QuestionUiType = 1 | 2 | 3 | 4 /** 文本输入 | 单选 | 多选 | 下拉选择 */

    /** question time type */
    type QuestionTimeType = 5 | 10 | 15 | 20 | 30 | 45 | 60 | 90 /** 5s | 10s | 15s | 20s | 30s | 45s | 60s | 90s */

    /** question template id */
    type QuestionCategoryName =
      | 'ChineseCharacterDictation1' // 汉字听写-提示 (jiu表示小鸟的叫声)
      | 'ChineseCharacterDictation2' // 根据拼音写汉字-提示 (tang)
      | 'CharacterRadicalAddition' // 汉字加一加 (车)
      | 'WordDictation' // 词语听写 (zhi re)
      | 'IdiomWriting1' // 成语-文字要求 (反义字)
      | 'IdiomWriting2' // 成语-文字要求 (看图写成语)
    // | 'TEMPLATE_IDIOM_IMAGE' // 成语-看图
      | 'PoetryComprehension' // 诗词理解-选择题

    /** question score type */
    type QuestionScoreType = 0 | 1 /** 固定分数 | 答题个数 */

    /** competition round type */
    type CompetitionRoundType = 0 | 1 | 3 /** 题包环节 | 加时环节 | 决赛环节 */

    /**
     * competition publish status
     *
     * - 0: unpublished
     * - 1: published
     * - 2: processing
     * - 3: finished
     */
    enum PublishStatus {
      Unpublished = 0,
      Published = 1,
      Processing = 2,
      Finished = 3,
    }

    interface CompetitionItem {
      Id: number
      Name: string
      StartTime: string
      EndTime: string
      TeamGroupNumber: number
      PublishStatus: number
      RoomID: number
    }

    /** room */
    interface Room {
      /** room id */
      ID: number
      /** room name */
      Name: string
    }

    /** question add params */
    interface QuestionAddParams {
      RoomID: number
      MainID: number
      TeamGroupID: number
      QuestionID: number
      QuestionDetaiID: number
      TeamGroupQuestionID: number
    }
    interface QuestionListDetailRound {
      /** 题目 id */
      Id: number
      Name: string
      Answers: string
      QuestionId: number
      IsGood: number
      Image: string
      ImageUrl: string
      Answer: string
    }

    /** get current question params */
    interface GetCurrentQuestionParams {
      /** 活动 id */
      ActivityID: number
      /** 队伍分组 id */
      GroupID: number
      /** 轮次类型 */
      RoundType: CompetitionRoundType
      /** 是否已使用 */
      isUse?: boolean
    }

    /** activity detail */
    interface ActivityDetail {
      /** 背景图片 */
      BackgroundImg: string
      /** 创建时间 */
      CreatedTime: string
      /** 结束时间 */
      EndTime: string
      /** 活动 id */
      Id: number
      /** 活动名称 */
      Name: string
      /** 发布状态 */
      PublishStatus: number
      /** 房间 id */
      RoomID: number
      /** 开始时间 */
      StartTime: string
      /** 队伍分组数量 */
      TeamGroupNumber: number
      /** 队伍数量 */
      Teams: number
      /** 活动副标题 */
      ActivityTitle?: string
      /** 普通赛事规则 */
      ActivityContent?: string
      /** 加时赛规则 */
      ExtraTimeContent?: string
    }

    /** create room request */
    interface CreateRoomRequest {
      /** 活动 id */
      id: number
      /** 活动名称 */
      name: string
      /** 开始时间 */
      startTime: string
      /** 结束时间 */
      endTime: string
      /** 队伍数量 */
      teams: number
      /** 创建时间 */
      createdTime: string
      /** 房间 id */
      roomID: number
      /** 队伍分组数量 */
      teamGroupNumber: number
      /** 背景图片 */
      backgroundImg: string
    }

    /** 当前题目响应 */
    interface CurrentQuestionResponse {
      /** 活动题目记录 */
      Activity_Question: QuestionListRecord
      /** 题目列表 */
      QuestionList: {
        /** 题目 id */
        Id: number
        /** 题目名称 */
        Name: string
        /** 题目内容 */
        QuestionContent: string
        /** 题目类型 */
        QuestionType: string
      }
      /** 队伍分组题目 id */
      TeamGroup_QuestionID: number
      IsCompleted: boolean
    }

    /** 获取当前正在比赛的信息  */
    interface GetCurrentQuestionInfo {
      /** 答案 */
      Answer: string
      /** 结束时间 */
      EndTime: string
      /** 高度 */
      Height: number
      /** 分值 */
      Point: number
      /** 题目详情 id */
      QuestionDetailID: number
      QuestionDetaiID: number
      /** 题目 id */
      QuestionID: number
      /** 题目规则 */
      QuestionRule: number
      /** 开始时间 */
      StartTime: string
      /** 任务模板列表 */
      TaskTemplete: any[]
      /** 队伍分组 id */
      TeamGroupID: number
      /** 队伍分组题目 id */
      TeamGroupQuestionID: number
      /** 队伍列表 */
      TeamList: any[]
      /** 宽度 */
      Width: number
      ActivityID: number
      Answer: string
    }

    /** update room request */
    interface UpdateRoomRequest {
      /** 活动 id */
      id: number
      /** 活动名称 */
      name: string
      /** 开始时间 */
      startTime: string
      /** 结束时间 */
      endTime: string
      /** 队伍数量 */
      teams: number
      /** 队伍分组数量 */
      teamGroupNumber: number
      /** 活动副标题 */
      activityTitle?: string
      /** 普通赛事规则 */
      activityContent?: string
      /** 加时赛规则 */
      extraTimeContent?: string
    }

    /** create team list request */
    interface CreateTeamListRequest {
      /** 队伍 id */
      id: number
      /** 主 id */
      mainId: number
      /** 队伍编号 */
      number: string
      /** 队伍名称 */
      name: string
      /** 笔序列号 */
      penSerial: string
      /** 队员名单 */
      nameList: string
      /** 学校名称 */
      schoolName: string
      /** 队伍分组 id */
      teamGroupId: number
      /** 队伍头像 */
      headImg?: string
    }

    interface TeamListRecord {
      /** 队伍 id */
      Id: number
      /** 主 id */
      MainId: number
      /** 队伍编号 */
      Number: string
      /** 队伍名称 */
      Name: string
      /** 笔序列号 */
      PenSerial: string
      /** 队员名单 */
      NameList: string
      /** 学校名称 */
      SchoolName: string
      /** 队伍分组 id */
      TeamGroupId: number
      /** 队伍头像 */
      HeadImg?: string
    }

    interface TeamAnswerData {
      Id: number
      MainId: number
      TeamGroupId: number
      TeamId: number
      QuestionId: number
      QuestionDetailId: number | null
      UserAnswerPicture: string
      UserAnswerFont: string // JSON string
      TeamName: string
      Points: number
      ResultPotins: number
      Status: number
      // 兼容字段（用于兜底）
      AnswerValuePicture?: string
      Guid?: string
      QuestionDetaiID: number | null
    }

    interface QuestionListRecord {
      /** 活动题目名称 */
      ActitvityQuestionName: string
      /** 活动 id */
      ActivityID: number
      /** 主键 id */
      ID: number
      /** 分值 */
      Point: number
      /** 题目 id */
      QuestionID: number
      /** 题目序号 */
      QuestionIndex: number
      /** 题目规则 */
      QuestionRule: number
      /** 题目副标题 */
      QuestionSubTitle: string
      /** 答题时间（秒） */
      QuestionTime: number
      /** 赛题包类型 */
      RoundType: CompetitionRoundType
      /** 题目模板 id */
      TemplateID: number
      /** UI 类型 */
      UIType: QuestionCategoryName
    }

    interface ActivityTeamGroup {
      /** 队伍分组 id */
      Id: number
      /** 是否已结束 */
      IsEnd: boolean
      /** 主活动 id */
      MainId: number
      /** 分组名称 */
      Name: string
      /** 图标 */
      icon: string
      /** 队伍分组 id（兼容字段） */
      id: number
      /** 分组名称（兼容字段） */
      name: string
      RoundType: number
    }

    interface CreateQuestionRequest {
      /** 题目 id */
      id: number
      /** 活动 id */
      activityID: number
      /** 问题 id */
      questionID: number
      /** 题目序号 */
      questionIndex: number
      /** 活动题目名称 */
      actitvityQuestionName: string
      /** 答题时间（秒） */
      questionTime: number
      /** 题目规则 */
      questionRule: number
      /** UI 类型 */
      uiType: string
      /** 分值 */
      point: number
      /** 题目副标题 */
      questionSubTitle: string
      /** 题目模板 id */
      templateID: number
      /** 赛题包类型 */
      roundType: number
    }

    interface AddExtraTimeParams extends Array<ExtraTimeItem> {}

    interface ExtraTimeItem {
      GroupName: string
      ActivityID: number
      TeamInfos: TeamInfo[]
    }

    interface TeamInfo {
      TeamID: number
      TeamName: string
    }

    /** common record */
    type CommonRecord<T = any> = {
      /** record id */
      id: number
      /** record creator */
      createBy: string
      /** record create time */
      createTime: string
      /** record updater */
      updateBy: string
      /** record update time */
      updateTime: string
      /** record status */
      status: EnableStatus | null
    } & T
  }
}
