"""
Задание 5.
Задание на закрепление навыков работы со стеком
Реализуйте структуру "стопка тарелок".
Мы можем складывать тарелки в стопку и при превышении некоторого значения
нужно начать складывать тарелки в новую стопку.
Структура должна предусматривать наличие нескольких стеков.
Создание нового стека происходит при достижении предыдущим стеком порогового значения.
Реализуйте по аналогии с примером, рассмотренным на уроке, необходимые методы,
для реализации это структуры, добавьте новые методы (не рассмотренные в примере с урока)
для реализации этой задачи.
После реализации структуры, проверьте ее работу на различных сценариях
Подсказка:
Отдельне стопки можно реализовать через:
1) созд-е экземпляров стека (если стопка - класс)
или
2) lst = [[], [], [], [],....]
Примечание: в этом задании вспомните ваши знания по работе с ООП
и опирайтесь на пример урока
Прошу вас внимательно читать ТЗ и не забыть выполнить все пункты.
Задание творческое. Здесь нет жестких требований к выполнению.
"""

class PlateStackClass:
    def __init__(self, max_size):
        self.elems = []
        self.max_size = max_size    # размер стопки

    def __str__(self):
        return str(self.elems)

    def is_empty(self):
        return self.elems == [[]]

    def push_in(self, el):
        """Предполагаем, что верхний элемент стека находится в конце списка
        если размер стопки равен пороговому значению то создается новая стопка
        и туда кладется значние"""
        if len(self.elems[len(self.elems)-1]) < self.max_size: # PyCharm ругается на эту строку
            self.elems[len(self.elems)-1].append(el)
        else:
            self.elems.append([])
            self.elems[len(self.elems) - 1].append(el)

    def pop_out(self):
        """Берем тарелку из крайней стопки, если она пустая удаляем ее"""
        result = self.elems[len(self.elems) - 1].pop()
        if len(self.elems[len(self.elems) - 1]) == 0:
            self.elems.pop()
        return result

    def get_val(self):
        return self.elems[len(self.elems) - 1]
        [len(self.elems[len(self.elems) - 1])-1]  # PyCharm ругается на эту строку, как на ненужную

    def stack_size(self):
        """Общее количество тарелок"""
        elem_sum = 0
        for stack in self.elems:
            elem_sum += len(stack)
        return elem_sum

    def stack_count(self):
        """Количество стоек"""
        return len(self.elems)


if __name__ == '__main__':
    plates = PlateStackClass(3)
    plates.push_in('Plate1') # PyCharm ругается на эту строку
    plates.push_in('Plate2')
    plates.push_in('Plate3')
    plates.push_in('Plate4')
    plates.push_in('Plate5')
    print(plates)
    print(plates.pop_out())
    print(plates.get_val())
    print(plates.stack_size())
    print(plates.stack_count())
    print(plates)

# не срабатывает:
# Traceback (most recent call last):
#   File "D:\ОблакоОлег\Geek\PyCharm\02\HW_P02-01-05.py", line 71, in <module>
#     plates.push_in('Plate1')
#   File "D:\ОблакоОлег\Geek\PyCharm\02\HW_P02-01-05.py", line 39, in push_in
#     if len(self.elems[len(self.elems)-1]) < self.max_size:
# IndexError: list index out of range
# 
# Process finished with exit code 1