довольно объёмный прак, есть модельное решение