package de.avatic.lcc.model.calculation;

import java.math.BigDecimal;

/**
 * Represents the results of inventory cost calculations.
 * This class contains various inventory-related metrics and associated costs
 * including safety stock levels, inventory in different states, and annual costs.
 */
public class InventoryCostResult {

    private BigDecimal safetyStockInDays;
    /**
     * The operational stock level maintained for regular operations
     */
    private  BigDecimal operationalStock;
    /**
     * The safety stock level maintained as buffer against uncertainties
     */
    private BigDecimal safetyStock;
    /**
     * The amount of inventory physically stored in warehouses
     */
    private BigDecimal stockedInventory;
    /**
     * The amount of inventory currently in transit
     */
    private BigDecimal inTransportStock;
    /**
     * The amount of stock before payment is due
     */
    private BigDecimal stockBeforePayment;
    /**
     * Annual costs related to capital investment in inventory
     */
    private BigDecimal annualCapitalCost;
    /**
     * Annual costs associated with storing inventory
     */
    private BigDecimal annualStorageCost;


    public InventoryCostResult(BigDecimal operationalStock, BigDecimal safetyStock, BigDecimal stockedInventory, BigDecimal inTransportStock, BigDecimal stockBeforePayment, BigDecimal annualCapitalCost, BigDecimal annualStorageCost, BigDecimal safetyStockInDays) {
        this.operationalStock = operationalStock;
        this.safetyStock = safetyStock;
        this.stockedInventory = stockedInventory;
        this.inTransportStock = inTransportStock;
        this.stockBeforePayment = stockBeforePayment;
        this.annualCapitalCost = annualCapitalCost;
        this.annualStorageCost = annualStorageCost;
        this.safetyStockInDays = safetyStockInDays;

    }


    /**
     * Gets the operational stock level
     *
     * @return the operational stock level
     */
    public BigDecimal getOperationalStock() {
        return operationalStock;
    }

    /**
     * Sets the operational stock level
     *
     * @param operationalStock the operational stock level to set
     */
    public void setOperationalStock(BigDecimal operationalStock) {
        this.operationalStock = operationalStock;
    }

    /**
     * Gets the safety stock level
     *
     * @return the safety stock level
     */
    public BigDecimal getSafetyStock() {
        return safetyStock;
    }

    /**
     * Sets the safety stock level
     *
     * @param safetyStock the safety stock level to set
     */
    public void setSafetyStock(BigDecimal safetyStock) {
        this.safetyStock = safetyStock;
    }

    /**
     * Gets the stocked inventory amount
     *
     * @return the stocked inventory amount
     */
    public BigDecimal getStockedInventory() {
        return stockedInventory;
    }

    /**
     * Sets the stocked inventory amount
     *
     * @param stockedInventory the stocked inventory amount to set
     */
    public void setStockedInventory(BigDecimal stockedInventory) {
        this.stockedInventory = stockedInventory;
    }

    /**
     * Gets the in-transport stock amount
     *
     * @return the in-transport stock amount
     */
    public BigDecimal getInTransportStock() {
        return inTransportStock;
    }

    /**
     * Sets the in-transport stock amount
     *
     * @param inTransportStock the in-transport stock amount to set
     */
    public void setInTransportStock(BigDecimal inTransportStock) {
        this.inTransportStock = inTransportStock;
    }

    /**
     * Gets the stock amount before payment
     *
     * @return the stock amount before payment
     */
    public BigDecimal getStockBeforePayment() {
        return stockBeforePayment;
    }

    /**
     * Sets the stock amount before payment
     *
     * @param stockBeforePayment the stock amount before payment to set
     */
    public void setStockBeforePayment(BigDecimal stockBeforePayment) {
        this.stockBeforePayment = stockBeforePayment;
    }

    /**
     * Gets the annual capital cost
     *
     * @return the annual capital cost
     */
    public BigDecimal getAnnualCapitalCost() {
        return annualCapitalCost;
    }

    /**
     * Sets the annual capital cost
     *
     * @param annualCapitalCost the annual capital cost to set
     */
    public void setAnnualCapitalCost(BigDecimal annualCapitalCost) {
        this.annualCapitalCost = annualCapitalCost;
    }

    /**
     * Gets the annual storage cost
     *
     * @return the annual storage cost
     */
    public BigDecimal getAnnualStorageCost() {
        return annualStorageCost;
    }

    /**
     * Sets the annual storage cost
     *
     * @param annualStorageCost the annual storage cost to set
     */
    public void setAnnualStorageCost(BigDecimal annualStorageCost) {
        this.annualStorageCost = annualStorageCost;
    }

    public BigDecimal getSafetyStockInDays() {
        return safetyStockInDays;
    }

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