package de.avatic.lcc.dto.error;

import com.fasterxml.jackson.annotation.JsonProperty;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public class CalculationJobDestinationDumpDTO {

    private Integer id;

    @JsonProperty("calculation_job_id")
    private Integer calculationJobId;

    @JsonProperty("premise_destination_id")
    private Integer premiseDestinationId;

    @JsonProperty("shipping_frequency")
    private Long shippingFrequency; // annual shipping frequency

    @JsonProperty("total_cost")
    private BigDecimal totalCost; // aka MEK_B in EUR (excl. Airfreight)

    @JsonProperty("annual_amount")
    private BigDecimal annualAmount; // annual quantity for this destinations in pieces

    // Risk fields
    @JsonProperty("annual_risk_cost")
    private BigDecimal annualRiskCost; // complete calculation with globally stored worst case container rates (excl. Airfreight)

    @JsonProperty("annual_chance_cost")
    private BigDecimal annualChanceCost; // complete calculation with globally stored best case container rates (excl. Airfreight)

    // Handling fields
    @JsonProperty("is_small_unit")
    private Boolean isSmallUnit; // small unit equals KLT, volume of a handling unit is smaller than 0.08 cbm

    @JsonProperty("annual_repacking_cost")
    private BigDecimal annualRepackingCost;

    @JsonProperty("annual_handling_cost")
    private BigDecimal annualHandlingCost;

    @JsonProperty("annual_disposal_cost")
    private BigDecimal annualDisposalCost;

    // Inventory fields
    @JsonProperty("operational_stock")
    private BigDecimal operationalStock; // operational stock in single pieces

    @JsonProperty("safety_stock")
    private BigDecimal safetyStock; // safety stock in single pieces

    @JsonProperty("stocked_inventory")
    private BigDecimal stockedInventory; // sum of operational and safety stock

    @JsonProperty("in_transport_stock")
    private BigDecimal inTransportStock;

    @JsonProperty("stock_before_payment")
    private BigDecimal stockBeforePayment;

    @JsonProperty("annual_capital_cost")
    private BigDecimal annualCapitalCost;

    @JsonProperty("annual_storage_cost")
    private BigDecimal annualStorageCost; // Flächenkosten

    // Custom fields
    @JsonProperty("custom_value")
    private BigDecimal customValue; // Zollwert

    @JsonProperty("custom_duties")
    private BigDecimal customDuties; // Zollabgaben

    @JsonProperty("tariff_rate")
    private BigDecimal tariffRate; // Zollsatz

    @JsonProperty("annual_custom_cost")
    private BigDecimal annualCustomCost; // Zollabgaben inkl. Einmalkosten

    // Air freight risk fields
    @JsonProperty("air_freight_share_max")
    private BigDecimal airFreightShareMax;

    @JsonProperty("air_freight_share")
    private BigDecimal airFreightShare;

    @JsonProperty("air_freight_volumetric_weight")
    private BigDecimal airFreightVolumetricWeight;

    @JsonProperty("air_freight_weight")
    private BigDecimal airFreightWeight;

    @JsonProperty("annual_air_freight_cost")
    private BigDecimal annualAirFreightCost;

    // Transportation fields
    @JsonProperty("is_d2d")
    private Boolean isD2d;

    @JsonProperty("rate_d2d")
    private BigDecimal rateD2d;

    @JsonProperty("container_type")
    private String containerType;

    @JsonProperty("hu_count")
    private Long huCount; // number of handling units in total (full container, with layers)

    @JsonProperty("layer_structure")
    private Map<String, Object> layerStructure; // json representation of a single layer

    @JsonProperty("layer_count")
    private Long layerCount; // number of layers per full container or truck

    @JsonProperty("transport_weight_exceeded")
    private Boolean transportWeightExceeded; // limiting factor: TRUE if weight limited or FALSE if volume limited

    @JsonProperty("annual_transportation_cost")
    private BigDecimal annualTransportationCost; // total annual transportation costs in EUR

    @JsonProperty("container_utilization")
    private BigDecimal containerUtilization;

    @JsonProperty("transit_time_in_days")
    private Long transitTimeInDays;

    @JsonProperty("safety_stock_in_days")
    private Long safetyStockInDays;

    // Material cost fields
    @JsonProperty("material_cost")
    private BigDecimal materialCost;

    @JsonProperty("fca_cost")
    private BigDecimal fcaCost;

    @JsonProperty("sections")
    private List<CalculationJobRouteSectionDumpDTO> sections;

    public Boolean getSmallUnit() {
        return isSmallUnit;
    }

    public void setSmallUnit(Boolean smallUnit) {
        isSmallUnit = smallUnit;
    }

    public Boolean getD2d() {
        return isD2d;
    }

    public void setD2d(Boolean d2d) {
        isD2d = d2d;
    }

    public List<CalculationJobRouteSectionDumpDTO> getSections() {
        return sections;
    }

    public void setSections(List<CalculationJobRouteSectionDumpDTO> sections) {
        this.sections = sections;
    }

    // Default constructor
    public CalculationJobDestinationDumpDTO() {
    }

    // Getters and setters
    public Integer getId() {
        return id;
    }

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

    public Integer getCalculationJobId() {
        return calculationJobId;
    }

    public void setCalculationJobId(Integer calculationJobId) {
        this.calculationJobId = calculationJobId;
    }

    public Integer getPremiseDestinationId() {
        return premiseDestinationId;
    }

    public void setPremiseDestinationId(Integer premiseDestinationId) {
        this.premiseDestinationId = premiseDestinationId;
    }

    public Long getShippingFrequency() {
        return shippingFrequency;
    }

    public void setShippingFrequency(Long shippingFrequency) {
        this.shippingFrequency = shippingFrequency;
    }

    public BigDecimal getTotalCost() {
        return totalCost;
    }

    public void setTotalCost(BigDecimal totalCost) {
        this.totalCost = totalCost;
    }

    public BigDecimal getAnnualAmount() {
        return annualAmount;
    }

    public void setAnnualAmount(BigDecimal annualAmount) {
        this.annualAmount = annualAmount;
    }

    public BigDecimal getAnnualRiskCost() {
        return annualRiskCost;
    }

    public void setAnnualRiskCost(BigDecimal annualRiskCost) {
        this.annualRiskCost = annualRiskCost;
    }

    public BigDecimal getAnnualChanceCost() {
        return annualChanceCost;
    }

    public void setAnnualChanceCost(BigDecimal annualChanceCost) {
        this.annualChanceCost = annualChanceCost;
    }

    public Boolean getIsSmallUnit() {
        return isSmallUnit;
    }

    public void setIsSmallUnit(Boolean isSmallUnit) {
        this.isSmallUnit = isSmallUnit;
    }

    public BigDecimal getAnnualRepackingCost() {
        return annualRepackingCost;
    }

    public void setAnnualRepackingCost(BigDecimal annualRepackingCost) {
        this.annualRepackingCost = annualRepackingCost;
    }

    public BigDecimal getAnnualHandlingCost() {
        return annualHandlingCost;
    }

    public void setAnnualHandlingCost(BigDecimal annualHandlingCost) {
        this.annualHandlingCost = annualHandlingCost;
    }

    public BigDecimal getAnnualDisposalCost() {
        return annualDisposalCost;
    }

    public void setAnnualDisposalCost(BigDecimal annualDisposalCost) {
        this.annualDisposalCost = annualDisposalCost;
    }

    public BigDecimal getOperationalStock() {
        return operationalStock;
    }

    public void setOperationalStock(BigDecimal operationalStock) {
        this.operationalStock = operationalStock;
    }

    public BigDecimal getSafetyStock() {
        return safetyStock;
    }

    public void setSafetyStock(BigDecimal safetyStock) {
        this.safetyStock = safetyStock;
    }

    public BigDecimal getStockedInventory() {
        return stockedInventory;
    }

    public void setStockedInventory(BigDecimal stockedInventory) {
        this.stockedInventory = stockedInventory;
    }

    public BigDecimal getInTransportStock() {
        return inTransportStock;
    }

    public void setInTransportStock(BigDecimal inTransportStock) {
        this.inTransportStock = inTransportStock;
    }

    public BigDecimal getStockBeforePayment() {
        return stockBeforePayment;
    }

    public void setStockBeforePayment(BigDecimal stockBeforePayment) {
        this.stockBeforePayment = stockBeforePayment;
    }

    public BigDecimal getAnnualCapitalCost() {
        return annualCapitalCost;
    }

    public void setAnnualCapitalCost(BigDecimal annualCapitalCost) {
        this.annualCapitalCost = annualCapitalCost;
    }

    public BigDecimal getAnnualStorageCost() {
        return annualStorageCost;
    }

    public void setAnnualStorageCost(BigDecimal annualStorageCost) {
        this.annualStorageCost = annualStorageCost;
    }

    public BigDecimal getCustomValue() {
        return customValue;
    }

    public void setCustomValue(BigDecimal customValue) {
        this.customValue = customValue;
    }

    public BigDecimal getCustomDuties() {
        return customDuties;
    }

    public void setCustomDuties(BigDecimal customDuties) {
        this.customDuties = customDuties;
    }

    public BigDecimal getTariffRate() {
        return tariffRate;
    }

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

    public BigDecimal getAnnualCustomCost() {
        return annualCustomCost;
    }

    public void setAnnualCustomCost(BigDecimal annualCustomCost) {
        this.annualCustomCost = annualCustomCost;
    }

    public BigDecimal getAirFreightShareMax() {
        return airFreightShareMax;
    }

    public void setAirFreightShareMax(BigDecimal airFreightShareMax) {
        this.airFreightShareMax = airFreightShareMax;
    }

    public BigDecimal getAirFreightShare() {
        return airFreightShare;
    }

    public void setAirFreightShare(BigDecimal airFreightShare) {
        this.airFreightShare = airFreightShare;
    }

    public BigDecimal getAirFreightVolumetricWeight() {
        return airFreightVolumetricWeight;
    }

    public void setAirFreightVolumetricWeight(BigDecimal airFreightVolumetricWeight) {
        this.airFreightVolumetricWeight = airFreightVolumetricWeight;
    }

    public BigDecimal getAirFreightWeight() {
        return airFreightWeight;
    }

    public void setAirFreightWeight(BigDecimal airFreightWeight) {
        this.airFreightWeight = airFreightWeight;
    }

    public BigDecimal getAnnualAirFreightCost() {
        return annualAirFreightCost;
    }

    public void setAnnualAirFreightCost(BigDecimal annualAirFreightCost) {
        this.annualAirFreightCost = annualAirFreightCost;
    }

    public Boolean getIsD2d() {
        return isD2d;
    }

    public void setIsD2d(Boolean isD2d) {
        this.isD2d = isD2d;
    }

    public BigDecimal getRateD2d() {
        return rateD2d;
    }

    public void setRateD2d(BigDecimal rateD2d) {
        this.rateD2d = rateD2d;
    }

    public String getContainerType() {
        return containerType;
    }

    public void setContainerType(String containerType) {
        this.containerType = containerType;
    }

    public Long getHuCount() {
        return huCount;
    }

    public void setHuCount(Long huCount) {
        this.huCount = huCount;
    }

    public Map<String, Object> getLayerStructure() {
        return layerStructure;
    }

    public void setLayerStructure(Map<String, Object> layerStructure) {
        this.layerStructure = layerStructure;
    }

    public Long getLayerCount() {
        return layerCount;
    }

    public void setLayerCount(Long layerCount) {
        this.layerCount = layerCount;
    }

    public Boolean getTransportWeightExceeded() {
        return transportWeightExceeded;
    }

    public void setTransportWeightExceeded(Boolean transportWeightExceeded) {
        this.transportWeightExceeded = transportWeightExceeded;
    }

    public BigDecimal getAnnualTransportationCost() {
        return annualTransportationCost;
    }

    public void setAnnualTransportationCost(BigDecimal annualTransportationCost) {
        this.annualTransportationCost = annualTransportationCost;
    }

    public BigDecimal getContainerUtilization() {
        return containerUtilization;
    }

    public void setContainerUtilization(BigDecimal containerUtilization) {
        this.containerUtilization = containerUtilization;
    }

    public Long getTransitTimeInDays() {
        return transitTimeInDays;
    }

    public void setTransitTimeInDays(Long transitTimeInDays) {
        this.transitTimeInDays = transitTimeInDays;
    }

    public Long getSafetyStockInDays() {
        return safetyStockInDays;
    }

    public void setSafetyStockInDays(Long safetyStockInDays) {
        this.safetyStockInDays = safetyStockInDays;
    }

    public BigDecimal getMaterialCost() {
        return materialCost;
    }

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

    public BigDecimal getFcaCost() {
        return fcaCost;
    }

    public void setFcaCost(BigDecimal fcaCost) {
        this.fcaCost = fcaCost;
    }
}