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

import org.hibernate.validator.constraints.NotBlank;

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

/**
 * 旅客运输服务特定要素子实体类
 * 仅在开具旅客运输服务特定要素的数电发票（specificFactor为09时）需要传入
 * 最多2000行，至少1行；若任意字段填写则触发全量必填校验
 */
public class TravellerTransport {

    /**
     * 出行人
     * 必填，最大20字符
     */
    @NotBlank(message = "出行人traveller不能为空")
    @Size(max = 20, message = "出行人长度不能超过20字符")
    private String traveller;

    /**
     * 出行日期
     * 必填，格式为yyyy-MM-dd
     */
    @NotBlank(message = "出行日期travelDate不能为空")
    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$",
            message = "出行日期格式错误，必须为yyyy-MM-dd")
    private String travelDate;

    /**
     * 出行人证件类型
     * 必填，可选值：101(组织机构代码证)、102(营业执照)、103(税务登记证)、199(其他单位证件)、201(居民身份证)等
     */
    @NotBlank(message = "出行人证件类型travellerCardType不能为空")
    @Pattern(regexp = "^101|102|103|199|201|202|203|204|205|206|207|208|210|212|213|214|215|216|299$",
            message = "出行人证件类型不在合法范围内")
    private String travellerCardType;

    /**
     * 出行人证件号码
     * 必填，最大20字符
     */
    @NotBlank(message = "出行人证件号码travellerCardNo不能为空")
    @Size(max = 20, message = "出行人证件号码长度不能超过20字符")
    private String travellerCardNo;

    /**
     * 出行地
     * 必填，最大80字符
     */
    @NotBlank(message = "出行地travelPlace不能为空")
    @Size(max = 80, message = "出行地长度不能超过80字符")
    private String travelPlace;

    /**
     * 到达地
     * 必填，最大80字符
     */
    @NotBlank(message = "到达地arrivePlace不能为空")
    @Size(max = 80, message = "到达地长度不能超过80字符")
    private String arrivePlace;

    /**
     * 交通工具类型
     * 必填，可选值：1(飞机)、2(火车)、3(长途汽车)、4(公共交通)、5(出租车)、6(汽车)、7(船舶)、9(其他)
     */
    @NotBlank(message = "交通工具类型vehicleType不能为空")
    @Pattern(regexp = "^1|2|3|4|5|6|7|9$",
            message = "交通工具类型只能传入：1(飞机)、2(火车)、3(长途汽车)、4(公共交通)、5(出租车)、6(汽车)、7(船舶)、9(其他)")
    private String vehicleType;

    /**
     * 交通工具等级
     * 当交通工具类型为火车、飞机、船舶时必填，对应可选值：
     * 火车：一等座/二等座/软席/硬席
     * 飞机：公务舱/头等舱/经济舱
     * 船舶：一等舱/二等舱/三等舱
     */
    @Pattern(regexp = "^$|一等座|二等座|软席|硬席|公务舱|头等舱|经济舱|一等舱|二等舱|三等舱",
            message = "交通工具等级不在合法范围内")
    private String vehicleLevel;

    public String getTraveller() {
        return traveller;
    }

    public void setTraveller(String traveller) {
        this.traveller = traveller;
    }

    public String getTravelDate() {
        return travelDate;
    }

    public void setTravelDate(String travelDate) {
        this.travelDate = travelDate;
    }

    public String getTravellerCardType() {
        return travellerCardType;
    }

    public void setTravellerCardType(String travellerCardType) {
        this.travellerCardType = travellerCardType;
    }

    public String getTravellerCardNo() {
        return travellerCardNo;
    }

    public void setTravellerCardNo(String travellerCardNo) {
        this.travellerCardNo = travellerCardNo;
    }

    public String getTravelPlace() {
        return travelPlace;
    }

    public void setTravelPlace(String travelPlace) {
        this.travelPlace = travelPlace;
    }

    public String getArrivePlace() {
        return arrivePlace;
    }

    public void setArrivePlace(String arrivePlace) {
        this.arrivePlace = arrivePlace;
    }

    public String getVehicleType() {
        return vehicleType;
    }

    public void setVehicleType(String vehicleType) {
        this.vehicleType = vehicleType;
    }

    public String getVehicleLevel() {
        return vehicleLevel;
    }

    public void setVehicleLevel(String vehicleLevel) {
        this.vehicleLevel = vehicleLevel;
    }
}
