package de.avatic.lcc.e2e.testdata;

import java.util.List;

/**
 * Expected output values for a test case containing all calculated results.
 */
public record TestCaseExpected(
    double mekA,
    double logisticCost,
    double mekB,
    double fcaFee,
    double transportation,
    double d2d,
    double airFreight,
    double custom,
    double repackaging,
    double handling,
    double disposal,
    double space,
    double capital,
    int safetyStock,
    List<DestinationExpected> destinations
) {
    public static Builder builder() {
        return new Builder();
    }

    public static class Builder {
        private double mekA;
        private double logisticCost;
        private double mekB;
        private double fcaFee;
        private double transportation;
        private double d2d;
        private double airFreight;
        private double custom;
        private double repackaging;
        private double handling;
        private double disposal;
        private double space;
        private double capital;
        private int safetyStock;
        private List<DestinationExpected> destinations = List.of();

        public Builder mekA(double mekA) {
            this.mekA = mekA;
            return this;
        }

        public Builder logisticCost(double logisticCost) {
            this.logisticCost = logisticCost;
            return this;
        }

        public Builder mekB(double mekB) {
            this.mekB = mekB;
            return this;
        }

        public Builder fcaFee(double fcaFee) {
            this.fcaFee = fcaFee;
            return this;
        }

        public Builder transportation(double transportation) {
            this.transportation = transportation;
            return this;
        }

        public Builder d2d(Double d2d) {
            this.d2d = d2d;
            return this;
        }

        public Builder airFreight(double airFreight) {
            this.airFreight = airFreight;
            return this;
        }

        public Builder custom(double custom) {
            this.custom = custom;
            return this;
        }

        public Builder repackaging(double repackaging) {
            this.repackaging = repackaging;
            return this;
        }

        public Builder handling(double handling) {
            this.handling = handling;
            return this;
        }

        public Builder disposal(double disposal) {
            this.disposal = disposal;
            return this;
        }

        public Builder space(double space) {
            this.space = space;
            return this;
        }

        public Builder capital(double capital) {
            this.capital = capital;
            return this;
        }

        public Builder safetyStock(int safetyStock) {
            this.safetyStock = safetyStock;
            return this;
        }

        public Builder destinations(List<DestinationExpected> destinations) {
            this.destinations = destinations;
            return this;
        }

        public TestCaseExpected build() {
            return new TestCaseExpected(
                mekA, logisticCost, mekB, fcaFee, transportation, d2d, airFreight,
                custom, repackaging, handling, disposal, space, capital, safetyStock, destinations
            );
        }
    }
}
