package de.avatic.lcc.model.db.premises;

import de.avatic.lcc.model.db.nodes.Location;
import de.avatic.lcc.model.db.utils.DimensionUnit;
import de.avatic.lcc.model.db.utils.WeightUnit;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import jdk.jfr.Unsigned;

import java.math.BigDecimal;
import java.time.LocalDateTime;


public class Premise {

    private Integer id;

    private LocalDateTime createdAt;

    private LocalDateTime updatedAt;

    @Digits(integer = 15, fraction = 2)
    private BigDecimal materialCost;

    private Boolean isFcaEnabled;

    @Digits(integer = 7, fraction = 2)
    private BigDecimal overseaShare;

    @Size(max = 8)
    private String hsCode;

    @Digits(integer = 7, fraction = 2)
    private BigDecimal tariffRate;

    private Boolean tariffUnlocked;

    @Size(max = 16)
    private PremiseState state;

    @Unsigned
    private Integer individualHuLength;

    @Unsigned
    private Integer individualHuHeight;

    @Unsigned
    private Integer individualHuWidth;

    @Unsigned
    private Integer individualHuWeight;

    private DimensionUnit huDisplayedDimensionUnit;

    private WeightUnit huDisplayedWeightUnit;

    @Unsigned
    private Integer huUnitCount;

    private Boolean huStackable;

    private Boolean huMixable;

    @NotNull
    private Integer materialId;

    private Integer supplierNodeId;

    private Integer userSupplierNodeId;

    private Location location;

    private Integer countryId;

    private Integer packagingId;

    private Integer userId;

    public DimensionUnit getHuDisplayedDimensionUnit() {
        return huDisplayedDimensionUnit;
    }

    public WeightUnit getHuDisplayedWeightUnit() {
        return huDisplayedWeightUnit;
    }

    public Location getLocation() {
        return location;
    }

    public void setLocation(Location location) {
        this.location = location;
    }

    public Integer getCountryId() {
        return countryId;
    }

    public void setCountryId(Integer countryId) {
        this.countryId = countryId;
    }

    public Integer getId() {
        return id;
    }

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

    public LocalDateTime getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(LocalDateTime createdAt) {
        this.createdAt = createdAt;
    }

    public LocalDateTime getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(LocalDateTime updatedAt) {
        this.updatedAt = updatedAt;
    }

    public BigDecimal getMaterialCost() {
        return materialCost;
    }

    public void setMaterialCost(BigDecimal materialCost) {
        this.materialCost = materialCost;
    }

    public Boolean getFcaEnabled() {
        return isFcaEnabled;
    }

    public void setFcaEnabled(Boolean fcaEnabled) {
        isFcaEnabled = fcaEnabled;
    }

    public BigDecimal getOverseaShare() {
        return overseaShare;
    }

    public void setOverseaShare(BigDecimal overseaShare) {
        this.overseaShare = overseaShare;
    }

    public String getHsCode() {
        return hsCode;
    }

    public void setHsCode(String hsCode) {
        this.hsCode = hsCode;
    }

    public BigDecimal getTariffRate() {
        return tariffRate;
    }

    public void setTariffRate(BigDecimal tariffRate) {
        this.tariffRate = tariffRate;
    }

    public PremiseState getState() {
        return state;
    }

    public void setState(PremiseState state) {
        this.state = state;
    }

    public Integer getIndividualHuLength() {
        return individualHuLength;
    }

    public void setIndividualHuLength(Integer individualHuLength) {
        this.individualHuLength = individualHuLength;
    }

    public Integer getIndividualHuHeight() {
        return individualHuHeight;
    }

    public void setIndividualHuHeight(Integer individualHuHeight) {
        this.individualHuHeight = individualHuHeight;
    }

    public Integer getIndividualHuWidth() {
        return individualHuWidth;
    }

    public void setIndividualHuWidth(Integer individualHuWidth) {
        this.individualHuWidth = individualHuWidth;
    }

    public Integer getIndividualHuWeight() {
        return individualHuWeight;
    }

    public void setIndividualHuWeight(Integer individualHuWeight) {
        this.individualHuWeight = individualHuWeight;
    }

    public void setHuDisplayedDimensionUnit(DimensionUnit huDisplayedDimensionUnit) {
        this.huDisplayedDimensionUnit = huDisplayedDimensionUnit;
    }

    public void setHuDisplayedWeightUnit(WeightUnit huDisplayedWeightUnit) {
        this.huDisplayedWeightUnit = huDisplayedWeightUnit;
    }

    public Integer getHuUnitCount() {
        return huUnitCount;
    }

    public void setHuUnitCount(Integer huUnitCount) {
        this.huUnitCount = huUnitCount;
    }

    public Boolean getHuStackable() {
        return huStackable;
    }

    public void setHuStackable(Boolean huStackable) {
        this.huStackable = huStackable;
    }

    public Boolean getHuMixable() {
        return huMixable;
    }

    public void setHuMixable(Boolean huMixable) {
        this.huMixable = huMixable;
    }

    public Integer getMaterialId() {
        return materialId;
    }

    public void setMaterialId(Integer materialId) {
        this.materialId = materialId;
    }

    public Integer getSupplierNodeId() {
        return supplierNodeId;
    }

    public void setSupplierNodeId(Integer supplierNodeId) {
        this.supplierNodeId = supplierNodeId;
    }

    public Integer getUserSupplierNodeId() {
        return userSupplierNodeId;
    }

    public void setUserSupplierNodeId(Integer userSupplierNodeId) {
        this.userSupplierNodeId = userSupplierNodeId;
    }

    public Integer getPackagingId() {
        return packagingId;
    }

    public void setPackagingId(Integer packagingId) {
        this.packagingId = packagingId;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public Boolean getTariffUnlocked() {
        return tariffUnlocked;
    }

    public void setTariffUnlocked(Boolean tariffUnlocked) {
        this.tariffUnlocked = tariffUnlocked;
    }
}
