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

import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.Digits;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.math.BigDecimal;

/**
 * 不动产销售特定要素子实体类
 * 仅在开具不动产销售特定要素的数电发票（specificFactor为05时）需要传入
 * 此时商品只能有一行明细，且规格型号、计量单位都不能有值
 */
public class RealPropertySellInfo {

    /**
     * 不动产单元代码/网签合同备案编号
     * 最大28字符
     */
    @Size(max = 28, message = "不动产单元代码/网签合同备案编号不能超过28字符")
    private String realPropertyContractNumber;

    /**
     * 不动产地址(省)
     * 必填，需以省、自治区、直辖市、北京市、天津市、上海市、重庆市任意一个关键词结尾
     */
    @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;

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

    /**
     * 土地增值税项目编号
     * 最大18字符
     */
    @Size(max = 18, message = "土地增值税项目编号不能超过18字符")
    private String incrementTaxNumber;

    /**
     * 核定计税价格
     * 小数点后保留两位小数
     */
    @Digits(integer = 20, fraction = 2, message = "核定计税价格格式错误，最多20位整数，保留2位小数")
    private BigDecimal price;

    /**
     * 实际成交税金额
     * 小数点后保留两位小数；当核定计税价格有值时必填
     */
    @Digits(integer = 20, fraction = 2, message = "实际成交税金额格式错误，最多20位整数，保留2位小数")
    private BigDecimal taxAmount;

    /**
     * 产权证书/不动产权证号
     * 最大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;

    public String getRealPropertyContractNumber() {
        return realPropertyContractNumber;
    }

    public void setRealPropertyContractNumber(String realPropertyContractNumber) {
        this.realPropertyContractNumber = realPropertyContractNumber;
    }

    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 getCrossCityFlag() {
        return crossCityFlag;
    }

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

    public String getIncrementTaxNumber() {
        return incrementTaxNumber;
    }

    public void setIncrementTaxNumber(String incrementTaxNumber) {
        this.incrementTaxNumber = incrementTaxNumber;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public BigDecimal getTaxAmount() {
        return taxAmount;
    }

    public void setTaxAmount(BigDecimal taxAmount) {
        this.taxAmount = taxAmount;
    }

    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;
    }
}
