package com.writeoff.module.audit.model;

import java.util.List;

public class AuditTask {
    private Long id;
    private Long meetingId;
    private AuditNode node;
    private Long assigneeUserId;
    private String assigneeUserName;
    private AuditTaskStatus status;
    private String opinion;
    private String slaDeadlineAt;
    private Integer timeoutLevel;
    private Integer overtimeHours;
    private Boolean overtime;
    private Long transferFromUserId;
    private String transferReason;
    private String returnReason;
    private Integer rejectCount;
    private String lastRejectReason;
    private String lastActionAt;
    private List<AuditFlowNodeInfo> flowNodes;

    public AuditTask(Long id, Long meetingId, AuditNode node, Long assigneeUserId, AuditTaskStatus status, String opinion) {
        this(id, meetingId, node, assigneeUserId, status, opinion, null, 0, 0, false, null, null, null, 0, null, null);
    }

    public AuditTask(Long id, Long meetingId, AuditNode node, Long assigneeUserId, AuditTaskStatus status, String opinion, String slaDeadlineAt, Integer timeoutLevel) {
        this(id, meetingId, node, assigneeUserId, status, opinion, slaDeadlineAt, timeoutLevel, 0, false, null, null, null, 0, null, null);
    }

    public AuditTask(Long id,
                     Long meetingId,
                     AuditNode node,
                     Long assigneeUserId,
                     AuditTaskStatus status,
                     String opinion,
                     String slaDeadlineAt,
                     Integer timeoutLevel,
                     Integer overtimeHours,
                     Boolean overtime,
                     Long transferFromUserId,
                     String transferReason,
                     String returnReason,
                     Integer rejectCount,
                     String lastRejectReason,
                     String lastActionAt) {
        this.id = id;
        this.meetingId = meetingId;
        this.node = node;
        this.assigneeUserId = assigneeUserId;
        this.status = status;
        this.opinion = opinion;
        this.slaDeadlineAt = slaDeadlineAt;
        this.timeoutLevel = timeoutLevel;
        this.overtimeHours = overtimeHours;
        this.overtime = overtime;
        this.transferFromUserId = transferFromUserId;
        this.transferReason = transferReason;
        this.returnReason = returnReason;
        this.rejectCount = rejectCount;
        this.lastRejectReason = lastRejectReason;
        this.lastActionAt = lastActionAt;
    }

    public Long getId() {
        return id;
    }

    public Long getMeetingId() {
        return meetingId;
    }

    public AuditNode getNode() {
        return node;
    }

    public Long getAssigneeUserId() {
        return assigneeUserId;
    }

    public String getAssigneeUserName() {
        return assigneeUserName;
    }

    public AuditTaskStatus getStatus() {
        return status;
    }

    public String getOpinion() {
        return opinion;
    }

    public String getSlaDeadlineAt() {
        return slaDeadlineAt;
    }

    public Integer getTimeoutLevel() {
        return timeoutLevel;
    }

    public Integer getOvertimeHours() {
        return overtimeHours;
    }

    public Boolean getOvertime() {
        return overtime;
    }

    public Long getTransferFromUserId() {
        return transferFromUserId;
    }

    public String getTransferReason() {
        return transferReason;
    }

    public String getReturnReason() {
        return returnReason;
    }

    public Integer getRejectCount() {
        return rejectCount;
    }

    public String getLastRejectReason() {
        return lastRejectReason;
    }

    public String getLastActionAt() {
        return lastActionAt;
    }

    public List<AuditFlowNodeInfo> getFlowNodes() {
        return flowNodes;
    }

    public void setStatus(AuditTaskStatus status) {
        this.status = status;
    }

    public void setOpinion(String opinion) {
        this.opinion = opinion;
    }

    public void setAssigneeUserId(Long assigneeUserId) {
        this.assigneeUserId = assigneeUserId;
    }

    public void setAssigneeUserName(String assigneeUserName) {
        this.assigneeUserName = assigneeUserName;
    }

    public void setSlaDeadlineAt(String slaDeadlineAt) {
        this.slaDeadlineAt = slaDeadlineAt;
    }

    public void setTimeoutLevel(Integer timeoutLevel) {
        this.timeoutLevel = timeoutLevel;
    }

    public void setOvertimeHours(Integer overtimeHours) {
        this.overtimeHours = overtimeHours;
    }

    public void setOvertime(Boolean overtime) {
        this.overtime = overtime;
    }

    public void setTransferFromUserId(Long transferFromUserId) {
        this.transferFromUserId = transferFromUserId;
    }

    public void setTransferReason(String transferReason) {
        this.transferReason = transferReason;
    }

    public void setReturnReason(String returnReason) {
        this.returnReason = returnReason;
    }

    public void setRejectCount(Integer rejectCount) {
        this.rejectCount = rejectCount;
    }

    public void setLastRejectReason(String lastRejectReason) {
        this.lastRejectReason = lastRejectReason;
    }

    public void setLastActionAt(String lastActionAt) {
        this.lastActionAt = lastActionAt;
    }

    public void setFlowNodes(List<AuditFlowNodeInfo> flowNodes) {
        this.flowNodes = flowNodes;
    }
}
