@Override
    public void call(int floor, Direction direction) {
        Direction cabinDirection = cabinDirection();

        Goal newGoal = new Call(floor, direction);
        if (!thereIsAGoal() || goalIsOnTheRoad(newGoal)) {
            nextGoals.addFirst(newGoal);
        } else {
            if (cabinDirection == newGoal.getNextDirection() && cabinDirection != nextGoal().getNextDirection()) {
                nextGoals.addFirst(newGoal);
            } else {
                nextGoals.addLast(newGoal);
            }
        }
    }