package ru.mai.dep806.money;

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

/**
 * Created by stud on 26.02.2015.
 */
public class Money {
    private BigDecimal amount;
    private Currency currency;


    public Money(BigDecimal amount, Currency currency) {
        this.amount = amount;
        this.currency = currency;
    }

    public Money(String amount, Currency currency) {
        this(new BigDecimal(amount), currency);
    }

    // регулируем вывод на печать
    @Override
    public String toString() {
        return amount + " " + currency;
        /* return "Money{" +
                "amount=" + amount +
                ", currency=" + currency +
                '}';*/
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public Currency getCurrency() {
        return currency;
    }

    public void setCurrency(Currency currency) {
        this.currency = currency;
    }

    // валюты для сложения должны быть равны
    // иначе выбрасывает исключение
    // а если ок, то возвращает сумму

    public Money add(Money m2){
        BigDecimal m2amount = m2.amount;
        if(this.currency != m2.currency){
            // throw new IllegalArgumentException("Cannot convert currency");
            // если валюты не равны, булем конвертировать
            m2amount = convert(m2amount, m2.currency, this.currency);

        }

        BigDecimal sum = this.amount.add(m2amount);
        return new Money(sum, this.currency);
    }

    private BigDecimal convert(BigDecimal amount, Currency currency1, Currency currency2) {

        // 1. сконввертировать amount в базовую валюту RUR
        BigDecimal result = amount.multiply(currency1.getRate());

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

        return result;
    }
}
