Анализ и разделение логики класса Discount.
Уменьшаем количество операций, которые выполняет данная функция.

Выделение класса,  замена кода команды switch на полиморфизм и тд.
Анализ метода addItem
Смена сигнатуры метода addItem т.к. он нес дополнительную, и ненужную
смысловую нагрузку + аргументы.

--Есть класс Item поэтому нет смысла передавать большой список
аргументов.