package pwc.taxtech.drop;

import org.hibernate.annotations.ColumnDefault;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.sql.Date;
import java.util.Objects;

import static pwc.taxtech.Const.*;

@Entity
@Table(name = "OPERATION_LOG_KEYVALUE", schema = PROJECT_ADMIN, catalog = "")
public class OperationLogKeyvalue {
    private String id;
    private String operationContent;
    private String moduleName;
    private String operationObject;
    private String operationAction;
    private String originalState;
    private String updateState;
    private String operationUser;
    private String ip;
    private String comment;
    private Date createTime;

    @Id
    @Column(name = "ID", nullable = true, length = 128)
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Basic
    @Column(name = "OPERATION_CONTENT", nullable = true, length = 255)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getOperationContent() {
        return operationContent;
    }

    public void setOperationContent(String operationContent) {
        this.operationContent = operationContent;
    }

    @Basic
    @Column(name = "MODULE_NAME", nullable = true, length = 255)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getModuleName() {
        return moduleName;
    }

    public void setModuleName(String moduleName) {
        this.moduleName = moduleName;
    }

    @Basic
    @Column(name = "OPERATION_OBJECT", nullable = true, length = 100)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getOperationObject() {
        return operationObject;
    }

    public void setOperationObject(String operationObject) {
        this.operationObject = operationObject;
    }

    @Basic
    @Column(name = "OPERATION_ACTION", nullable = true, length = 100)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getOperationAction() {
        return operationAction;
    }

    public void setOperationAction(String operationAction) {
        this.operationAction = operationAction;
    }

    @Basic
    @Column(name = "ORIGINAL_STATE", nullable = true, columnDefinition = DEF_BIG_STRING)
    public String getOriginalState() {
        return originalState;
    }

    public void setOriginalState(String originalState) {
        this.originalState = originalState;
    }

    @Basic
    @Column(name = "UPDATE_STATE", nullable = true, columnDefinition = DEF_BIG_STRING)
    public String getUpdateState() {
        return updateState;
    }

    public void setUpdateState(String updateState) {
        this.updateState = updateState;
    }

    @Basic
    @Column(name = "OPERATION_USER", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getOperationUser() {
        return operationUser;
    }

    public void setOperationUser(String operationUser) {
        this.operationUser = operationUser;
    }

    @Basic
    @Column(name = "IP", nullable = true, length = 50)
    @ColumnDefault(DEF_DEFAULT_STRING)
    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    @Basic
    @Column(name = B_Delimiter + "COMMENT" + E_Delimiter, nullable = true, columnDefinition = DEF_BIG_STRING)
    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    @Basic
    @Column(name = "CREATE_TIME", nullable = false, columnDefinition = DEF_DEFAULT_DATE)
    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        OperationLogKeyvalue that = (OperationLogKeyvalue) o;
        return Objects.equals(id, that.id) &&
                Objects.equals(operationContent, that.operationContent) &&
                Objects.equals(moduleName, that.moduleName) &&
                Objects.equals(operationObject, that.operationObject) &&
                Objects.equals(operationAction, that.operationAction) &&
                Objects.equals(originalState, that.originalState) &&
                Objects.equals(updateState, that.updateState) &&
                Objects.equals(operationUser, that.operationUser) &&
                Objects.equals(ip, that.ip) &&
                Objects.equals(comment, that.comment) &&
                Objects.equals(createTime, that.createTime);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, operationContent, moduleName, operationObject, operationAction, originalState, updateState, operationUser, ip, comment, createTime);
    }
}