package carpool.model.identityVerification;
import java.util.Calendar;
import org.json.JSONException;
import org.json.JSONObject;
import carpool.common.DateUtility;
import carpool.configurations.EnumConfig.LicenseType;
import carpool.configurations.EnumConfig.VerificationState;
import carpool.configurations.EnumConfig.VerificationType;
import carpool.interfaces.PseudoModel;
public abstract class IdentityVerification implements PseudoModel, Comparable<IdentityVerification>{
private VerificationType type;
private int verificationId;
private int userId;
private String realName;
private String licenseNumber;
private LicenseType licenseType;
private Calendar submissionDate;
private Calendar expireDate;
private VerificationState state;
private Calendar reviewDate;
private int reviewerId;
private int recommenderId;
public IdentityVerification(VerificationType type, int verificationId,
int userId, String realName, String licenseNumber,
LicenseType licenseType, Calendar submissionDate,
Calendar expireDate, VerificationState state,
Calendar reviewDate, int reviewerId, int recommenderId) {
super();
this.type = type;
this.verificationId = verificationId;
this.userId = userId;
this.realName = realName;
this.licenseNumber = licenseNumber;
this.licenseType = licenseType;
this.submissionDate = submissionDate;
this.expireDate = expireDate;
this.state = state;
this.reviewDate = reviewDate;
this.reviewerId = reviewerId;
this.recommenderId = recommenderId;
}
public VerificationType getType(){
return this.type;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getLicenseNumber() {
return licenseNumber;
}
public void setLicenseNumber(String licenseNumber) {
this.licenseNumber = licenseNumber;
}
public LicenseType getLicenseType() {
return licenseType;
}
public void setLicenseType(LicenseType licenseType) {
this.licenseType = licenseType;
}
public Calendar getSubmissionDate() {
return submissionDate;
}
public void setSubmissionDate(Calendar submissionDate) {
this.submissionDate = submissionDate;
}
public Calendar getExpireDate() {
return expireDate;
}
public void setExpireDate(Calendar expireDate) {
this.expireDate = expireDate;
}
public VerificationState getState() {
return state;
}
public void setState(VerificationState state) {
this.state = state;
}
public Calendar getReviewDateDate() {
return reviewDate;
}
public void setReviewDateDate(Calendar reviewDateDate) {
this.reviewDate = reviewDateDate;
}
public int getReviewerId() {
return reviewerId;
}
public void setReviewerId(int reviewerId) {
this.reviewerId = reviewerId;
}
public int getRecommenderId() {
return recommenderId;
}
public void setRecommenderId(int recommenderId) {
this.recommenderId = recommenderId;
}
public int getVerificationId() {
return verificationId;
}
public void setVerificationId(int verificationId) {
this.verificationId = verificationId;
}
@Override
public JSONObject toJSON(){
JSONObject jsonVerification = new JSONObject();
try {
jsonVerification .put("type", this.getType().code);
jsonVerification .put("verificationId", this.getVerificationId());
jsonVerification .put("userId", this.getUserId());
jsonVerification .put("realName", this.getRealName());
jsonVerification .put("licenseNumber", this.getLicenseNumber());
jsonVerification .put("licenseType", this.getLicenseType().code);
jsonVerification .put("submissionDate", DateUtility.castToAPIFormat(this.getSubmissionDate()));
jsonVerification .put("expireDate", DateUtility.castToAPIFormat(this.getExpireDate()));
jsonVerification .put("state", this.getState().code);
jsonVerification .put("reviewDate", DateUtility.castToAPIFormat(this.getReviewDateDate()));
jsonVerification .put("reviewerId", this.getReviewerId());
jsonVerification .put("recommenderId", this.getRecommenderId());
} catch (JSONException e) {
e.printStackTrace();
}
return jsonVerification;
}
@Override
public int compareTo(IdentityVerification o) {
return this.getSubmissionDate().compareTo(o.getSubmissionDate());
}
public boolean equals(IdentityVerification v){
if(this.reviewDate==null||v.reviewDate==null){
return this.type == v.type && this.verificationId == v.verificationId && this.userId == v.getUserId() && this.realName.equals(v.realName) && this.licenseNumber.equals(v.licenseNumber) &&
this.licenseType == v.licenseType && this.submissionDate.getTime().toString().equals(v.getSubmissionDate().getTime().toString()) &&
this.expireDate.getTime().toString().equals(v.expireDate.getTime().toString()) && this.state == v.state &&
this.reviewerId == v.reviewerId && this.recommenderId == v.recommenderId;
}
return this.type == v.type && this.verificationId == v.verificationId && this.userId == v.getUserId() && this.realName.equals(v.realName) && this.licenseNumber.equals(v.licenseNumber) &&
this.licenseType == v.licenseType && this.submissionDate.getTime().toString().equals(v.getSubmissionDate().getTime().toString()) &&
this.expireDate.getTime().toString().equals(v.expireDate.getTime().toString()) && this.state == v.state &&
this.reviewDate.getTime().toString().equals(v.reviewDate.getTime().toString()) && this.reviewerId == v.reviewerId && this.recommenderId == v.recommenderId;
}
}