очень большая функция получается. хорошо бы выделить в отдельную функцию с красивым именем вот новую логику