package com.jeeplus.finance.invoice.domain.OMS;

import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

/**
 * 不动产经营租赁服务特定要素子实体类
 * 仅在开具不动产经营租赁服务特定要素的数电发票（specificFactor为06时）需要传入
 * 订单明细的规格型号和计量单位不能有值；特定要素信息需与订单明细行数量、顺序保持一致
 */
public class RealPropertyRentInfo {

    /**
     * 不动产地址(省)
     * 必填，需以省、自治区、直辖市、北京市、天津市、上海市、重庆市任意一个关键词结尾
     */
    @NotBlank(message = "不动产地址(省)realPropertyAddress不能为空")
    @Size(max = 100, message = "不动产地址(省)不能超过100字符")
    @Pattern(regexp = ".+(省|自治区|直辖市|北京市|天津市|上海市|重庆市)$",
            message = "不动产地址(省)必须以省、自治区、直辖市、北京市、天津市、上海市、重庆市任意一个关键词结尾")
    private String realPropertyAddress;

    /**
     * 不动产地址(市)
     * 需以市、盟、自治州、地区、区、县任意一个关键词结尾
     */
    @Size(max = 20, message = "不动产地址(市)不能超过20字符")
    @Pattern(regexp = "^$|.+(市|盟|自治州|地区|区|县)$",
            message = "不动产地址(市)必须以市、盟、自治州、地区、区、县任意一个关键词结尾")
    private String realPropertyAddressCity;

    /**
     * 详细地址
     * 必填，需包含街、路、村、乡、镇、道、巷、号关键词
     */
    @NotBlank(message = "详细地址detailAddress不能为空")
    @Size(max = 120, message = "详细地址不能超过120字符")
    @Pattern(regexp = ".+(街|路|村|乡|镇|道|巷|号)",
            message = "详细地址必须包含街、路、村、乡、镇、道、巷、号任意一个关键词")
    private String detailAddress;

    /**
     * 租赁开始日期
     * 必填，格式为yyyy-MM-dd HH:mm；不能晚于租赁结束日期
     */
    @NotBlank(message = "租赁开始日期rentStartDate不能为空")
    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$",
            message = "租赁开始日期格式错误，应为yyyy-MM-dd HH:mm")
    private String rentStartDate;

    /**
     * 租赁结束日期
     * 必填，格式为yyyy-MM-dd HH:mm；不能早于租赁开始日期
     */
    @NotBlank(message = "租赁结束日期rentEndDate不能为空")
    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$",
            message = "租赁结束日期格式错误，应为yyyy-MM-dd HH:mm")
    private String rentEndDate;

    /**
     * 跨地（市）标志
     * 必填，0:否 1:是
     */
    @NotBlank(message = "跨地（市）标志crossCityFlag不能为空")
    @Pattern(regexp = "^0|1$", message = "跨地（市）标志只能传入：0(否)、1(是)")
    private String crossCityFlag;

    /**
     * 产权证书/不动产权证号
     * 最大40字符
     */
    @Size(max = 40, message = "产权证书/不动产权证号不能超过40字符")
    private String realPropertyCertificate;

    /**
     * 面积单位
     * 必填，可选值：1(平方千米)、2(平方米)、3(公顷)、4(亩)、5(hm²)、6(km²)、7(m²)、8(米)
     */
    @NotBlank(message = "面积单位unit不能为空")
    @Pattern(regexp = "^1|2|3|4|5|6|7|8$",
            message = "面积单位只能传入：1(平方千米)、2(平方米)、3(公顷)、4(亩)、5(hm²)、6(km²)、7(m²)、8(米)")
    private String unit;

    /**
     * 车牌号
     * 税收分类编码为3040502020200000000时必填，最大20字符
     */
    @Size(max = 20, message = "车牌号不能超过20字符")
    private String carNo;

    public String getRealPropertyAddress() {
        return realPropertyAddress;
    }

    public void setRealPropertyAddress(String realPropertyAddress) {
        this.realPropertyAddress = realPropertyAddress;
    }

    public String getRealPropertyAddressCity() {
        return realPropertyAddressCity;
    }

    public void setRealPropertyAddressCity(String realPropertyAddressCity) {
        this.realPropertyAddressCity = realPropertyAddressCity;
    }

    public String getDetailAddress() {
        return detailAddress;
    }

    public void setDetailAddress(String detailAddress) {
        this.detailAddress = detailAddress;
    }

    public String getRentStartDate() {
        return rentStartDate;
    }

    public void setRentStartDate(String rentStartDate) {
        this.rentStartDate = rentStartDate;
    }

    public String getRentEndDate() {
        return rentEndDate;
    }

    public void setRentEndDate(String rentEndDate) {
        this.rentEndDate = rentEndDate;
    }

    public String getCrossCityFlag() {
        return crossCityFlag;
    }

    public void setCrossCityFlag(String crossCityFlag) {
        this.crossCityFlag = crossCityFlag;
    }

    public String getRealPropertyCertificate() {
        return realPropertyCertificate;
    }

    public void setRealPropertyCertificate(String realPropertyCertificate) {
        this.realPropertyCertificate = realPropertyCertificate;
    }

    public String getUnit() {
        return unit;
    }

    public void setUnit(String unit) {
        this.unit = unit;
    }

    public String getCarNo() {
        return carNo;
    }

    public void setCarNo(String carNo) {
        this.carNo = carNo;
    }
}
