package Quantity;

import java.math.BigDecimal;
import java.math.MathContext;
import java.util.ArrayList;

/**
 * Created by K_A_Volchica on 19.03.2015.
 */
public class Quantity {
    private BigDecimal amount;//какое количество
    private Kind kind; // в чём количество

    public Quantity(BigDecimal amount, Kind kind) {//конструктор объекта
        this.amount = amount;
        this.kind = kind;
    }

    public Quantity(String amount, Kind kind) {
        this(new BigDecimal(amount), kind);
    }

    public BigDecimal getAmount() {
        return amount;
    }

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

    public Kind getKind() {
        return kind;
    }

    public void setKind(Kind kind) {
        this.kind = kind;
    }

    @Override
    public String toString() {//вывод
        return amount + " " + kind;
    }

    public Quantity add(Quantity s2) {//сложение, которое может осуществляться только с одинаковым видом меры
        BigDecimal s2amount = s2.amount;
        if (this.kind != s2.kind) {
            throw new IllegalArgumentException("Cannot convert kind");
        }
        BigDecimal sum = this.amount.add(s2amount);
        return new Quantity(sum, this.kind);
    }

    public Quantity subtract(Quantity s2) {//вычитание, которое может осуществляться только с одинаковым видом меры
        BigDecimal s2amount = s2.amount;
        if (this.kind != s2.kind) {
            throw new IllegalArgumentException("Cannot convert kind");
        }
        BigDecimal sub = this.amount.subtract(s2amount);
        return new Quantity(sub, this.kind);
    }

    public Quantity multiply(BigDecimal s) {//умножение
        BigDecimal sub = this.amount.multiply(s);
        return new Quantity(sub, this.kind);
    }

    public ArrayList<Quantity> divide(BigDecimal s) {//деление
        ArrayList<Quantity> results =new ArrayList<Quantity>();
        BigDecimal sub = this.amount.divide(s, 5, BigDecimal.ROUND_HALF_DOWN);
        System.out.println("При делении получили: "+sub);
        Quantity result = new Quantity(sub, this.kind);
        BigDecimal b= new BigDecimal(1.0);
        if (sub.compareTo(b)>=1)
        {
        int c = sub.intValue();
        BigDecimal d = new BigDecimal(c);
        System.out.println(d);
                if (d.compareTo(sub) <= 0) {
                Quantity q = new Quantity(d, this.kind);
                BigDecimal e = this.amount.subtract(d.multiply(s));
                int f = s.intValue();
                    Quantity q1=new Quantity(d.add(e),this.kind);
                for (int i = 1; i < f; i++) {
                    System.out.println(i + "-я часть с " + d + "  количеством");
results.add(q);
                }
                System.out.println(f + "-я часть с " + d.add(e) + " количеством");
                    results.add(q1);
                return results;
            }
                else
                {
                return results;
            }
        }
        else
        {
            System.out.println("Не делится нацело");
            results.add(result);
            return results;
        }
    }
}



