package com.lesingle.creation.vo.contest;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 竞赛详情 VO
 */
@Data
@Schema(description = "竞赛详情响应")
public class ContestDetailVO {

    @Schema(description = "竞赛 ID")
    private Long id;

    @Schema(description = "竞赛名称")
    private String contestName;

    @Schema(description = "竞赛类型：individual/team")
    private String contestType;

    @Schema(description = "竞赛状态：unpublished/published")
    private String contestState;

    @Schema(description = "进度状态：ongoing/finished")
    private String status;

    @Schema(description = "当前阶段：unpublished/registering/submitting/reviewing/finished")
    private String stage;

    @Schema(description = "竞赛开始时间")
    private LocalDateTime startTime;

    @Schema(description = "竞赛结束时间")
    private LocalDateTime endTime;

    @Schema(description = "线下地址")
    private String address;

    @Schema(description = "竞赛详情")
    private String content;

    @Schema(description = "授权租户 ID 列表")
    private List<Integer> contestTenants;

    @Schema(description = "封面 URL")
    private String coverUrl;

    @Schema(description = "海报 URL")
    private String posterUrl;

    @Schema(description = "联系人")
    private String contactName;

    @Schema(description = "联系电话")
    private String contactPhone;

    @Schema(description = "联系人二维码")
    private String contactQrcode;

    @Schema(description = "主办单位列表")
    private List<String> organizers;

    @Schema(description = "协办单位列表")
    private List<String> coOrganizers;

    @Schema(description = "赞助单位列表")
    private List<String> sponsors;

    @Schema(description = "可见范围：public/designated/internal")
    private String visibility;

    @Schema(description = "目标城市列表")
    private List<String> targetCities;

    @Schema(description = "最小年龄限制")
    private Integer ageMin;

    @Schema(description = "最大年龄限制")
    private Integer ageMax;

    @Schema(description = "报名开始时间")
    private LocalDateTime registerStartTime;

    @Schema(description = "报名结束时间")
    private LocalDateTime registerEndTime;

    @Schema(description = "报名状态：open/closed")
    private String registerState;

    @Schema(description = "是否需要审核")
    private Boolean requireAudit;

    @Schema(description = "允许报名的年级 ID 列表")
    private List<Integer> allowedGrades;

    @Schema(description = "允许报名的班级 ID 列表")
    private List<Integer> allowedClasses;

    @Schema(description = "团队最少成员数")
    private Integer teamMinMembers;

    @Schema(description = "团队最多成员数")
    private Integer teamMaxMembers;

    @Schema(description = "提交规则：once/resubmit")
    private String submitRule;

    @Schema(description = "作品提交开始时间")
    private LocalDateTime submitStartTime;

    @Schema(description = "作品提交结束时间")
    private LocalDateTime submitEndTime;

    @Schema(description = "作品类型")
    private String workType;

    @Schema(description = "作品要求说明")
    private String workRequirement;

    @Schema(description = "评审规则 ID")
    private Long reviewRuleId;

    @Schema(description = "评审开始时间")
    private LocalDateTime reviewStartTime;

    @Schema(description = "评审结束时间")
    private LocalDateTime reviewEndTime;

    @Schema(description = "赛果状态：unpublished/published")
    private String resultState;

    @Schema(description = "结果发布时间")
    private LocalDateTime resultPublishTime;

    @Schema(description = "有效状态：1-有效，2-失效")
    private Integer validState;

    @Schema(description = "创建人 ID")
    private Long creator;

    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    @Schema(description = "修改人 ID")
    private Long modifier;

    @Schema(description = "更新时间")
    private LocalDateTime modifyTime;

    @Schema(description = "报名人数")
    private Integer registrationCount;

    @Schema(description = "作品数量")
    private Integer worksCount;

    @Schema(description = "团队数量")
    private Integer teamsCount;

    @Schema(description = "评委数量")
    private Integer judgesCount;

    @Schema(description = "总作品数（已提交或评审中）")
    private Integer totalWorksCount;

    @Schema(description = "已完成评审作品数")
    private Integer reviewedCount;

    @Schema(description = "附件列表")
    private List<ContestAttachmentVO> attachments;
}
