package hr.com.port.ips.eracun.hub3;

import java.math.BigDecimal;
import java.util.Objects;


// DTO for HUB-3A PDF417 payload fields.
// All text fields should already be trimmed to their logical content; the builder will enforce lengths.
//
public class Hub3Pdf417Data {

    private String payerName;           // 30
    private String payerAddress;        // 27
    private String payerCity;           // 27
    private String payeeName;           // 25
    private String payeeAddress;        // 25
    private String payeeCity;           // 27
    private String iban;                // 21 (HR + 19 digits)
    private String model;               // 4  (e.g. "HR01")
    private String reference;           // 22
    private String purposeCode;         // 4  (ISO 20022, e.g. COST)
    private String description;         // 35
    private BigDecimal amountEur;       // in EUR; will be converted to eurocents (15-digit, left padded with zeros)

    public String getPayerName() { return payerName; }
    public void setPayerName(String payerName) { this.payerName = payerName; }

    public String getPayerAddress() { return payerAddress; }
    public void setPayerAddress(String payerAddress) { this.payerAddress = payerAddress; }

    public String getPayerCity() { return payerCity; }
    public void setPayerCity(String payerCity) { this.payerCity = payerCity; }

    public String getPayeeName() { return payeeName; }
    public void setPayeeName(String payeeName) { this.payeeName = payeeName; }

    public String getPayeeAddress() { return payeeAddress; }
    public void setPayeeAddress(String payeeAddress) { this.payeeAddress = payeeAddress; }

    public String getPayeeCity() { return payeeCity; }
    public void setPayeeCity(String payeeCity) { this.payeeCity = payeeCity; }

    public String getIban() { return iban; }
    public void setIban(String iban) { this.iban = iban; }

    public String getModel() { return model; }
    public void setModel(String model) { this.model = model; }

    public String getReference() { return reference; }
    public void setReference(String reference) { this.reference = reference; }

    public String getPurposeCode() { return purposeCode; }
    public void setPurposeCode(String purposeCode) { this.purposeCode = purposeCode; }

    public String getDescription() { return description; }
    public void setDescription(String description) { this.description = description; }

    public BigDecimal getAmountEur() { return amountEur; }
    public void setAmountEur(BigDecimal amountEur) { this.amountEur = amountEur; }

    public void requireNonNulls() {
        Objects.requireNonNull(payerName, "payerName");
        Objects.requireNonNull(payerAddress, "payerAddress");
        Objects.requireNonNull(payerCity, "payerCity");
        Objects.requireNonNull(payeeName, "payeeName");
        Objects.requireNonNull(payeeAddress, "payeeAddress");
        Objects.requireNonNull(payeeCity, "payeeCity");
        Objects.requireNonNull(iban, "iban");
        Objects.requireNonNull(model, "model");
        Objects.requireNonNull(reference, "reference");
        Objects.requireNonNull(purposeCode, "purposeCode");
        Objects.requireNonNull(description, "description");
        Objects.requireNonNull(amountEur, "amountEur");
    }
}
