hide play logic inside PlayController