поправил и почистил код, выделил отдельный интерфейс
тестирование не доделано