package com.ylx.point.domain.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;

@Data
@ApiModel("积分活动创建DTO")
public class PointActivityDTO {

    @ApiModelProperty("活动主键id")
    private Long id;

    /**
     * 活动名称
     */
    @ApiModelProperty("活动名称")
    @NotBlank(message = "活动名称不能为空")
    @Size(min = 2, max = 18, message = "活动名称长度必须在2-18个字符之间")
    private String name;

    /**
     * 活动简述
     */
    @ApiModelProperty("活动简述")
    @NotBlank(message = "活动简述不能为空")
    @Size(min = 2, max = 30, message = "活动简述长度必须在2-30个字符之间")
    private String description;

    @ApiModelProperty("活动城市")
    @NotBlank(message = "活动城市不能为空")
    private String cityCode;

    /**
     * 活动类型：0(签到活动), 1(新手活动), 2(每日活动), 3(每月活动)
     */
    @ApiModelProperty("活动类型")
    @NotNull(message = "活动类型不能为空")
    private Integer activityType;

    @ApiModelProperty("活动时间配置")
    @NotNull(message = "活动时间配置不能为空")
    private ActivityTimeConfig timeConfig;

    @ApiModelProperty("活动时间配置")
    private List<PointActivityTaskDTO> tasks;

    @ApiModelProperty("签到活动奖励配置")
    private PointSignTaskDTO signTaskDTO;

    /**
     * 状态：草稿=3, 发布=4
     */
    @ApiModelProperty("状态：草稿=3, 发布=4")
    @NotNull(message = "状态不能为空")
    private Integer status;

    /**
     * 活动时间配置
     */
    @Data
    public static class ActivityTimeConfig {

        @ApiModelProperty("是否长期有效 (1:是, 0:否)")
        @JsonProperty(value = "isPermanent")
        private String isPermanent;

        @JsonFormat(pattern = "yyyy-MM-dd")
        @ApiModelProperty("开始时间")
        private Date startTime;

        @JsonFormat(pattern = "yyyy-MM-dd")
        @ApiModelProperty("结束时间")
        private Date endTime;
    }

}
