package ru.mai.dep806.money;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * Created by stud on 26.02.2015.
 */
public class Quantity {
    private BigDecimal quantity;    // кол-во товара
    private UOM units;              // единицы измерения

    // конструкотор 1
    public Quantity(BigDecimal quantity, UOM units) {
        this.quantity = quantity;
        this.units = units;
    }

    // конструктор 2: чтобы подавать на вход строку, не
    // писать каждый раз BigDecimal
    // будет выбрать нужный конструктор
    public Quantity(String guantity, UOM units) {
        this(new BigDecimal(guantity), units);
    }

    public BigDecimal getQuantity() {
        return quantity;
    }

    public void setQuantity(BigDecimal quantity) {
        this.quantity = quantity;
    }

    public UOM getUnits() {
        return units;
    }

    public void setUnits(UOM units) {
        this.units = units;
    }

    @Override
    public String toString() {
        return quantity + " " + units;
        /* return "Quantity{" +
                "quantity=" + quantity +
                ", units=" + units +
                '}';*/
    }
    // 1. сложение
    public Quantity add(Quantity q4){
        BigDecimal q4quantity = q4.quantity;
        if(this.units != q4.units){
            q4quantity = convert(q4quantity, q4.units, this.units);
        }
        BigDecimal sum = this.quantity.add(q4quantity);
        return new Quantity(sum, this.units);
    }

    private BigDecimal convert(BigDecimal q4quantity, UOM units1, UOM units2) {

        // 1. сконввертировать quantity в базовую единицу измерения
        BigDecimal result = quantity.multiply(units1.getUomrate());
        System.out.println(result);

        // 2. сконвертировать получившуся сумму в целевую валюту currency2
        result = result.divide(units2.getUomrate(), 5, RoundingMode.HALF_EVEN);

        return result;
    }
}
