package cn.chnmuseum.party.model;

import cn.chnmuseum.party.common.validator.groups.Add;
import cn.chnmuseum.party.common.validator.groups.Update;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 展板
 * </p>
 *
 * @author Danny Lee
 * @since 2021-03-17
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("exhibition_board")
@ApiModel(value = "展板内容", description = "展板内容")
public class ExhibitionBoard implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("展板内容ID")
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    @NotNull(message = "展板ID不能为空", groups = {Update.class})
    private String id;

    @ApiModelProperty("展板内容名称")
    @TableField("name")
    @NotBlank(message = "展板名称不能为空", groups = {Add.class, Update.class})
    @Length(max = 30, message = "展板名称字数不能超过30")
    private String name;

    /**
     * 展板名称全拼音
     */
    @ApiModelProperty(hidden = true)
    @TableField("name_pin_yin")
    private String namePinYin;

    /**
     * 展板名称拼音首字母
     */
    @ApiModelProperty(hidden = true)
    @TableField("name_first_pin_yin")
    private String nameFirstPinYin;

    @ApiModelProperty("展板内容编号")
    @TableField(value = "serial_no")
    private String serialNo;

    @ApiModelProperty("展板内容版权方ID")
    @TableField("board_copyright_owner_id")
    @NotBlank(message = "展板内容版权方不能为空", groups = {Add.class, Update.class})
    private String boardCopyrightOwnerId;

    @ApiModelProperty("展板内容分类ID")
    @TableField("exhibition_board_cat_id")
    @NotBlank(message = "展板内容分类", groups = {Add.class, Update.class})
    private String exhibitionBoardCatId;

    @ApiModelProperty("展板内容图片URL")
    @TableField("cover")
//    @NotBlank(message = "展板图片URL不能为空", groups = {Add.class, Update.class})
    private String cover;

    @ApiModelProperty("展板内容二维码URL")
    @TableField("qrcode_url")
//    @NotBlank(message = "展板二维码URL不能为空", groups = {Add.class, Update.class})
    private String qrcodeUrl;

    @ApiModelProperty("展板内容简介")
    @TableField("remarks")
//    @NotBlank(message = "展板简介不能为空", groups = {Add.class, Update.class})
    @Length(max = 2000, message = "展板简介的字数超过最大限制2000")
    private String remarks;

    @ApiModelProperty("视频内容版权方ID")
    @TableField("video_content_copyright_owner_id")
//    @NotBlank(message = "视频内容版权方ID不能为空", groups = {Add.class, Update.class})
    private String videoContentCopyrightOwnerId;

    @ApiModelProperty("视频内容类别ID")
    @TableField("video_content_cat_id")
//    @NotBlank(message = "视频内容类别ID不能为空", groups = {Add.class, Update.class})
    private String videoContentCatId;

    @ApiModelProperty("视频内容ID")
    @TableField("video_content_id")
//    @NotBlank(message = "视频内容ID不能为空", groups = {Add.class, Update.class})
    private String videoContentId;

    @ApiModelProperty("参考资料文件夹")
    @TableField("ref_material_dir")
    private String refMaterialDir;

    @ApiModelProperty("审核状态")
    @TableField("audit_status")
    private String auditStatus;

    @ApiModelProperty("是否上架")
    @TableField("is_published")
    private Boolean published;

    @ApiModelProperty("是否已删除")
    @TableField("is_deleted")
    @TableLogic
    private Boolean deleted;

    @ApiModelProperty("创建日期")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @ApiModelProperty("修改日期")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @ApiModelProperty("展板音频文件ID列表(添加或更新使用)")
    @TableField(exist = false)
    private List<String> audioIdList;

    @ApiModelProperty("参考资料文件ID列表(添加或更新使用)")
    @TableField(exist = false)
    private List<String> datumIdList;

    @ApiModelProperty("展板视频缩略图")
    @TableField(exist = false)
    private String boardVideoContentThumbnail;

    @ApiModelProperty("所属学习内容ID")
    @TableField(exist = false)
    private String learningContentId;

    @ApiModelProperty("所属学习项目ID")
    @TableField(exist = false)
    private String learningProjectId;

    @ApiModelProperty("展板版权方名称")
    @TableField(exist = false)
    private String boardCopyrightOwnerName;

    @ApiModelProperty("展板分类名称")
    @TableField(exist = false)
    private String exhibitionBoardCatName;

    @ApiModelProperty("视频资料-视频内容版权方名称")
    @TableField(exist = false)
    private String videoContentCopyrightOwnerName;

    @ApiModelProperty("视频资料-视频内容分类名称")
    @TableField(exist = false)
    private String videoContentCatName;

    @ApiModelProperty("视频资料-视频内容名称")
    @TableField(exist = false)
    private String videoContentName;

    @ApiModelProperty("展板视频")
    @TableField(exist = false)
    private List<Asset> videoList;

    @ApiModelProperty("展板视频")
    @TableField(exist = false)
    private List<Asset> audioList;

    @ApiModelProperty("参考资料列表")
    @TableField(exist = false)
    private List<Asset> datumList;

    @ApiModelProperty("审核意见记录")
    @TableField(exist = false)
    private List<Audit> auditHistoryList;

    @ApiModelProperty("视频语言列表")
    @TableField(exist = false)
    private List<Map<String, String>> videoLanguageList;

    @ApiModelProperty("音频语言列表")
    @TableField(exist = false)
    private List<Map<String, String>> audioLanguageList;

    /**
     * 学习类容展板排序加的临时字段,表中不存在
     */
    @TableField(exist = false)
    private Integer sortorder;
}