package com.banesco.infrastructure.dtos.osb;

import io.quarkus.runtime.annotations.RegisterForReflection;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;

import java.util.ArrayList;
import java.util.List;


/**
 * <p>Java class for MsgRqHdr complex type.
 *
 * <p>The following schema fragment specifies the expected content contained within this class.
 *
 * <pre>
 * &lt;complexType name="MsgRqHdr"&gt;
 *   &lt;complexContent&gt;
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
 *       &lt;sequence&gt;
 *         &lt;element name="MessageDate" type="{http://xmlns.banesco.com/EnterpriseObjects/MsgRqHdr}datePattern" minOccurs="0"/&gt;
 *         &lt;element name="MessageTime" type="{http://xmlns.banesco.com/EnterpriseObjects/MsgRqHdr}timePattern" minOccurs="0"/&gt;
 *         &lt;element name="RequestId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="LastStatusRequest" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="FinalStatusRequest" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="ResumeId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="ReverseId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="LineId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="SourceChannelCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="SupervisorCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="OperatorCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="RequestedOperationType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="NetworkTrnInfo" type="{http://xmlns.banesco.com/EnterpriseObjects/MsgRqHdr}NetworkTrnInfo" maxOccurs="unbounded" minOccurs="0"/&gt;
 *         &lt;element name="ApplicantData" type="{http://xmlns.banesco.com/EnterpriseObjects/MsgRqHdr}ApplicantData" minOccurs="0"/&gt;
 *         &lt;element name="RecCtrlIn" type="{http://xmlns.banesco.com/EnterpriseObjects/MsgRqHdr}RecCtrlIn" minOccurs="0"/&gt;
 *         &lt;element name="ReturnValue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="MessageId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="Priority" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="VBProtocol" type="{http://xmlns.banesco.com/EnterpriseObjects/MsgRqHdr}VBProtocol" minOccurs="0"/&gt;
 *       &lt;/sequence&gt;
 *     &lt;/restriction&gt;
 *   &lt;/complexContent&gt;
 * &lt;/complexType&gt;
 * </pre>
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MsgRqHdr", propOrder = {
        "messageDate",
        "messageTime",
        "requestId",
        "lastStatusRequest",
        "finalStatusRequest",
        "resumeId",
        "reverseId",
        "lineId",
        "sourceChannelCode",
        "supervisorCode",
        "operatorCode",
        "requestedOperationType",
        "networkTrnInfo",
        "applicantData",
        "recCtrlIn",
        "returnValue",
        "messageId",
        "priority",
        "vbProtocol"
})
@RegisterForReflection
public class MsgRqHdr implements Cloneable {

    @XmlElement(name = "MessageDate")
    protected String messageDate;
    @XmlElement(name = "MessageTime")
    protected String messageTime;
    @XmlElement(name = "RequestId")
    protected String requestId;
    @XmlElement(name = "LastStatusRequest")
    protected String lastStatusRequest;
    @XmlElement(name = "FinalStatusRequest")
    protected String finalStatusRequest;
    @XmlElement(name = "ResumeId")
    protected String resumeId;
    @XmlElement(name = "ReverseId")
    protected String reverseId;
    @XmlElement(name = "LineId")
    protected String lineId;
    @XmlElement(name = "SourceChannelCode")
    protected String sourceChannelCode;
    @XmlElement(name = "SupervisorCode")
    protected String supervisorCode;
    @XmlElement(name = "OperatorCode")
    protected String operatorCode;
    @XmlElement(name = "RequestedOperationType")
    protected String requestedOperationType;
    @XmlElement(name = "NetworkTrnInfo")
    protected List<NetworkTrnInfo> networkTrnInfo;
    @XmlElement(name = "ApplicantData")
    protected ApplicantData applicantData;
    @XmlElement(name = "RecCtrlIn")
    protected RecCtrlIn recCtrlIn;
    @XmlElement(name = "ReturnValue")
    protected String returnValue;
    @XmlElement(name = "MessageId")
    protected String messageId;
    @XmlElement(name = "Priority")
    protected String priority;
    @XmlElement(name = "VBProtocol")
    protected VBProtocol vbProtocol;

    /**
     * Gets the value of the messageDate property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getMessageDate() {
        return messageDate;
    }

    /**
     * Sets the value of the messageDate property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setMessageDate(String value) {
        this.messageDate = value;
    }

    /**
     * Gets the value of the messageTime property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getMessageTime() {
        return messageTime;
    }

    /**
     * Sets the value of the messageTime property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setMessageTime(String value) {
        this.messageTime = value;
    }

    /**
     * Gets the value of the requestId property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getRequestId() {
        return requestId;
    }

    /**
     * Sets the value of the requestId property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setRequestId(String value) {
        this.requestId = value;
    }

    /**
     * Gets the value of the lastStatusRequest property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getLastStatusRequest() {
        return lastStatusRequest;
    }

    /**
     * Sets the value of the lastStatusRequest property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setLastStatusRequest(String value) {
        this.lastStatusRequest = value;
    }

    /**
     * Gets the value of the finalStatusRequest property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getFinalStatusRequest() {
        return finalStatusRequest;
    }

    /**
     * Sets the value of the finalStatusRequest property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setFinalStatusRequest(String value) {
        this.finalStatusRequest = value;
    }

    /**
     * Gets the value of the resumeId property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getResumeId() {
        return resumeId;
    }

    /**
     * Sets the value of the resumeId property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setResumeId(String value) {
        this.resumeId = value;
    }

    /**
     * Gets the value of the reverseId property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getReverseId() {
        return reverseId;
    }

    /**
     * Sets the value of the reverseId property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setReverseId(String value) {
        this.reverseId = value;
    }

    /**
     * Gets the value of the lineId property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getLineId() {
        return lineId;
    }

    /**
     * Sets the value of the lineId property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setLineId(String value) {
        this.lineId = value;
    }

    /**
     * Gets the value of the sourceChannelCode property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getSourceChannelCode() {
        return sourceChannelCode;
    }

    /**
     * Sets the value of the sourceChannelCode property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setSourceChannelCode(String value) {
        this.sourceChannelCode = value;
    }

    /**
     * Gets the value of the supervisorCode property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getSupervisorCode() {
        return supervisorCode;
    }

    /**
     * Sets the value of the supervisorCode property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setSupervisorCode(String value) {
        this.supervisorCode = value;
    }

    /**
     * Gets the value of the operatorCode property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getOperatorCode() {
        return operatorCode;
    }

    /**
     * Sets the value of the operatorCode property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setOperatorCode(String value) {
        this.operatorCode = value;
    }

    /**
     * Gets the value of the requestedOperationType property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getRequestedOperationType() {
        return requestedOperationType;
    }

    /**
     * Sets the value of the requestedOperationType property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setRequestedOperationType(String value) {
        this.requestedOperationType = value;
    }

    /**
     * Gets the value of the networkTrnInfo property.
     *
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the Jakarta XML Binding object.
     * This is why there is not a <CODE>set</CODE> method for the networkTrnInfo property.
     *
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getNetworkTrnInfo().add(newItem);
     * </pre>
     *
     *
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link NetworkTrnInfo }
     */
    public List<NetworkTrnInfo> getNetworkTrnInfo() {
        if (networkTrnInfo == null) {
            networkTrnInfo = new ArrayList<NetworkTrnInfo>();
        }
        return this.networkTrnInfo;
    }

    /**
     * Gets the value of the applicantData property.
     *
     * @return possible object is
     * {@link ApplicantData }
     */
    public ApplicantData getApplicantData() {
        return applicantData;
    }

    /**
     * Sets the value of the applicantData property.
     *
     * @param value allowed object is
     *              {@link ApplicantData }
     */
    public void setApplicantData(ApplicantData value) {
        this.applicantData = value;
    }

    /**
     * Gets the value of the recCtrlIn property.
     *
     * @return possible object is
     * {@link RecCtrlIn }
     */
    public RecCtrlIn getRecCtrlIn() {
        return recCtrlIn;
    }

    /**
     * Sets the value of the recCtrlIn property.
     *
     * @param value allowed object is
     *              {@link RecCtrlIn }
     */
    public void setRecCtrlIn(RecCtrlIn value) {
        this.recCtrlIn = value;
    }

    /**
     * Gets the value of the returnValue property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getReturnValue() {
        return returnValue;
    }

    /**
     * Sets the value of the returnValue property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setReturnValue(String value) {
        this.returnValue = value;
    }

    /**
     * Gets the value of the messageId property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getMessageId() {
        return messageId;
    }

    /**
     * Sets the value of the messageId property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setMessageId(String value) {
        this.messageId = value;
    }

    /**
     * Gets the value of the priority property.
     *
     * @return possible object is
     * {@link String }
     */
    public String getPriority() {
        return priority;
    }

    /**
     * Sets the value of the priority property.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setPriority(String value) {
        this.priority = value;
    }

    /**
     * Gets the value of the vbProtocol property.
     *
     * @return possible object is
     * {@link VBProtocol }
     */
    public VBProtocol getVBProtocol() {
        return vbProtocol;
    }


    public void setTransactionCode(String transactionCode) {
        this.getNetworkTrnInfo().get(0).setTransactionCode(transactionCode);
    }

    public void setNetworkTrnInfo(List<NetworkTrnInfo> networkTrnInfo) {
        this.networkTrnInfo = networkTrnInfo;
    }
   /* public void setVBProtocol(VBProtocol value) {
        this.vbProtocol = value;
    }
*/
  public void setVbprotocol(VBProtocol value) {
        this.vbProtocol = value;
    }
	
    public void setVbProtocol(VBProtocol value) {
        this.vbProtocol = value;
    }


    @Override
    public MsgRqHdr clone() throws CloneNotSupportedException {
        MsgRqHdr msgRqHdrClone = (MsgRqHdr) super.clone();
        msgRqHdrClone.applicantData = (ApplicantData) applicantData.clone();
        msgRqHdrClone.vbProtocol = (VBProtocol) vbProtocol.clone();

        msgRqHdrClone.networkTrnInfo = new ArrayList<>();

        for (NetworkTrnInfo trnInfo : networkTrnInfo) {
            msgRqHdrClone.networkTrnInfo.add((NetworkTrnInfo) trnInfo.clone());
        }
        return msgRqHdrClone;
    }
}
