package com.lesingle.creation.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.lesingle.creation.common.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

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

/**
 * 竞赛/活动表实体类
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("t_biz_contest")
public class Contest extends BaseEntity {

    /**
     * 赛事名称
     */
    @TableField("contest_name")
    private String contestName;

    /**
     * 赛事类型：individual/team
     */
    @TableField("contest_type")
    private String contestType;

    /**
     * 赛事状态：unpublished/published
     */
    @TableField("contest_state")
    private String contestState;

    /**
     * 赛事进度状态：ongoing/finished
     */
    @TableField("status")
    private String status;

    /**
     * 赛事开始时间
     */
    @TableField("start_time")
    private LocalDateTime startTime;

    /**
     * 赛事结束时间
     */
    @TableField("end_time")
    private LocalDateTime endTime;

    /**
     * 线下地址
     */
    @TableField("address")
    private String address;

    /**
     * 赛事详情
     */
    @TableField("content")
    private String content;

    /**
     * 授权租户 ID 数组（JSON）
     */
    @TableField("contest_tenants")
    private String contestTenants;

    /**
     * 封面 URL
     */
    @TableField("cover_url")
    private String coverUrl;

    /**
     * 海报 URL
     */
    @TableField("poster_url")
    private String posterUrl;

    /**
     * 联系人
     */
    @TableField("contact_name")
    private String contactName;

    /**
     * 联系电话
     */
    @TableField("contact_phone")
    private String contactPhone;

    /**
     * 联系人二维码
     */
    @TableField("contact_qrcode")
    private String contactQrcode;

    /**
     * 主办单位数组（JSON）
     */
    @TableField("organizers")
    private String organizers;

    /**
     * 协办单位数组（JSON）
     */
    @TableField("co_organizers")
    private String coOrganizers;

    /**
     * 赞助单位数组（JSON）
     */
    @TableField("sponsors")
    private String sponsors;

    /**
     * 报名开始时间
     */
    @TableField("register_start_time")
    private LocalDateTime registerStartTime;

    /**
     * 报名结束时间
     */
    @TableField("register_end_time")
    private LocalDateTime registerEndTime;

    /**
     * 报名任务状态：started/closed
     */
    @TableField("register_state")
    private String registerState;

    /**
     * 报名是否需要审核
     */
    @TableField("require_audit")
    private Boolean requireAudit;

    /**
     * 允许报名的年级 ID 数组（JSON）
     */
    @TableField("allowed_grades")
    private String allowedGrades;

    /**
     * 允许报名的班级 ID 数组（JSON）
     */
    @TableField("allowed_classes")
    private String allowedClasses;

    /**
     * 团队最少成员数
     */
    @TableField("team_min_members")
    private Integer teamMinMembers;

    /**
     * 团队最多成员数
     */
    @TableField("team_max_members")
    private Integer teamMaxMembers;

    /**
     * 目标城市列表（JSON）
     */
    @TableField("target_cities")
    private String targetCities;

    /**
     * 最小年龄限制
     */
    @TableField("age_min")
    private Integer ageMin;

    /**
     * 最大年龄限制
     */
    @TableField("age_max")
    private Integer ageMax;

    /**
     * 提交规则：once/resubmit
     */
    @TableField("submit_rule")
    private String submitRule;

    /**
     * 作品提交开始时间
     */
    @TableField("submit_start_time")
    private LocalDateTime submitStartTime;

    /**
     * 作品提交结束时间
     */
    @TableField("submit_end_time")
    private LocalDateTime submitEndTime;

    /**
     * 作品类型：image/video/document/code/other
     */
    @TableField("work_type")
    private String workType;

    /**
     * 作品要求说明
     */
    @TableField("work_requirement")
    private String workRequirement;

    /**
     * 评审规则 ID
     */
    @TableField("review_rule_id")
    private Long reviewRuleId;

    /**
     * 评审开始时间
     */
    @TableField("review_start_time")
    private LocalDateTime reviewStartTime;

    /**
     * 评审结束时间
     */
    @TableField("review_end_time")
    private LocalDateTime reviewEndTime;

    /**
     * 赛果状态：unpublished/published
     */
    @TableField("result_state")
    private String resultState;

    /**
     * 结果发布时间
     */
    @TableField("result_publish_time")
    private LocalDateTime resultPublishTime;

    /**
     * 可见范围：public/designated/internal
     */
    @TableField("visibility")
    private String visibility;

    /**
     * 所属租户 ID
     */
    @TableField("tenant_id")
    private Long tenantId;

    /**
     * 有效状态：1-有效，2-失效
     */
    @TableField("valid_state")
    private Integer validState;
}
