package jnpf.model.certificate.vo;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import jnpf.util.StringUtil;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Objects;

/**
 * 组织营业执照信息。
 */
@Data
public class CertificateOrganizeBusinessLicenseVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 组织ID。
     */
    @NotBlank(message = "组织ID不能为空")
    @Length(max = 50, message = "组织ID长度不能超过50")
    private String organizeId;

    /**
     * 证照图片。
     */
    @Length(max = 1000, message = "证照图片长度不能超过1000")
    private String certificateImage;

    /**
     * 公司名称。
     */
    @Length(max = 200, message = "公司名称长度不能超过200")
    private String companyName;

    /**
     * 法定代表人。
     */
    @Length(max = 100, message = "法定代表人长度不能超过100")
    private String legalRepresentative;

    /**
     * 公司地址。
     */
    @Length(max = 500, message = "公司地址长度不能超过500")
    private String companyAddress;

    /**
     * 成立时间，格式：yyyy-MM-dd。
     */
    @Length(max = 20, message = "成立时间长度不能超过20")
    private String establishDate;

    /**
     * 发证日期，格式：yyyy-MM-dd。
     */
    @Length(max = 20, message = "发证日期长度不能超过20")
    private String issueDate;

    /**
     * 到期日期，格式：yyyy-MM-dd。
     */
    @Length(max = 20, message = "到期日期长度不能超过20")
    private String expireDate;

    /**
     * 营业期限（展示字段）。
     */
    private String businessTerm;

    public void setBusinessTerm(String businessTerm) {
        this.businessTerm = businessTerm;
        if(StringUtil.isBlank(businessTerm) || !JSONUtil.isTypeJSONArray(businessTerm)){
            return;
        }
        JSONArray startEnd = JSONUtil.parseArray(businessTerm);
        if(startEnd.size() == 2){
            this.issueDate = startEnd.getStr(0);
            this.expireDate = startEnd.getStr(1);
        }
    }

    /**
     * 是否长期：0否，1是。
     */
    @Min(value = 0, message = "是否长期只能为0或1")
    @Max(value = 1, message = "是否长期只能为0或1")
    private Integer isLongTerm;

    public void buildIsLongTermObject(Object businessTermLong) {
        if(Objects.isNull(businessTermLong)){
            return;
        }
        if(businessTermLong instanceof Number){
            this.isLongTerm = ((Number) businessTermLong).intValue();
            return;
        }
        if(businessTermLong instanceof String){
            this.isLongTerm = Integer.parseInt((String) businessTermLong);
            return;
        }
        if(businessTermLong instanceof Boolean){
            this.isLongTerm = ((Boolean) businessTermLong) ? 1 : 0;
            return;
        }
    }
}
