package ex.core;

/**
 * This class stores the sequence of numbers inserted by the user. The sequence is stored into a List
 * to preserve the insertion order.
 **/

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

public class Sequence {
  private List<Number> _sequence;

  public Sequence() {
    _sequence = new ArrayList<>();
  }

  public int addNumber(int n) {
    Number number = new Number(n);
    int index = _sequence.indexOf(number);

    if (index == -1) // not found
      _sequence.add(number);
    else
      _sequence.get(index).incCount();
    
    return size();
  }

  public boolean removeNumber(int n) {
    Number number = new Number(n);
    int index = _sequence.indexOf(number);

    if (index == -1) // not found
      return false;
    else {
      number = _sequence.get(index);
      number.decCount();
      if (number.count() == 0)
        _sequence.remove(number);

      return true;
    }
  }

  public int size() {
    int n = 0;

    for (Number number : _sequence)
      n += number.count();

    return n;
  }

  public int distinctNumbers() {
    return _sequence.size();
  }
  
  public List<Number> sequence() {
    return Collections.unmodifiableList(_sequence);
  }
}