package jnpf.model.franchisee.req;

import com.fasterxml.jackson.annotation.JsonFormat;
import jnpf.model.common.PageDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Min;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 加盟商分页查询参数
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class FranchiseeQueryReq extends PageDto implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 关键字（加盟商编码/加盟商名称）
     */
    @Length(max = 100, message = "关键字长度不能超过100")
    private String keyword;

    /**
     * 手机号
     */
    @Length(max = 20, message = "手机号长度不能超过20")
    private String mobilePhone;

    /**
     * 最小门店数
     */
    @Min(value = 0, message = "最小门店数不能小于0")
    private Integer minStoreNum;

    /**
     * 最大门店数
     */
    @Min(value = 0, message = "最大门店数不能小于0")
    private Integer maxStoreNum;

    /**
     * 加盟商性质
     */
    @Length(max = 50, message = "加盟商性质长度不能超过50")
    private String franchiseeNature;

    /**
     * 门店商圈
     */
    @Length(max = 100, message = "门店商圈长度不能超过100")
    private String storeBusinessDistrict;

    /**
     * 加盟日期开始
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date joinDateStart;

    /**
     * 加盟日期结束
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date joinDateEnd;

    /**
     * 加盟时长开始，单位月份
     */
    private Integer joinDurationStart;
    /**
     * 加盟时长结束，单位月份
     */
    private Integer joinDurationEnd;

    /**
     * 最小投资金额
     */
    @DecimalMin(value = "0.00", message = "最小投资金额不能小于0")
    private BigDecimal minInvestAmount;

    /**
     * 最大投资金额
     */
    @DecimalMin(value = "0.00", message = "最大投资金额不能小于0")
    private BigDecimal maxInvestAmount;

    /**
     * 加盟方式
     */
    @Length(max = 50, message = "加盟方式长度不能超过50")
    private String joinType;

    /**
     * 加盟商状态
     */
    @Length(max = 50, message = "加盟商状态长度不能超过50")
    private String franchiseeStatus;

    /**
     * 加盟地区
     */
    private List<FranchiseeJoinRegionReq> joinRegion = new ArrayList<>();

    /**
     * 经营性质
     */
    @Length(max = 50, message = "经营性质长度不能超过50")
    private String businessNature;

    /**
     * 盈利预期（字典类型：franchisee_profit_expectation）
     */
    @Length(max = 50, message = "盈利预期长度不能超过50")
    private String profitExpectationStart;

    /**
     * 盈利预期（字典类型：franchisee_profit_expectation）
     */
    @Length(max = 50, message = "盈利预期长度不能超过50")
    private String profitExpectationEnd;

    /**
     * 年收入
     */
    @Length(max = 50, message = "年收入长度不能超过50")
    private String annualIncome;
}
