Функция достаточно большая, не хватает общего описания того, что в ней происходит и в какой последовательности. Например, в виде комментариев по коду перед каждым смысловым блоком