public ElevatorService()
 {
     Overweight     = false;
     StatisticMaker = new StatisticMaker();
 }
        public void MoveElevator()
        {
            if (!Elevator.ControlPanel.ClickedFloors.Contains(true) && ClickedFloors.Contains(true))
            {
                for (int i = NumberOfFloors; i > 0; i--)
                {
                    if (ClickedFloors[i - 1] == true)
                    {
                        if (i > Elevator.CurrentFloor)
                        {
                            if (CheckDirection() == Directions.Down)
                            {
                                RideDone?.Invoke();
                                FreeRideDone?.Invoke();
                            }
                            Elevator.CurrentDirection = Directions.Up;
                        }
                        else if (i < Elevator.CurrentFloor)
                        {
                            if (CheckDirection() == Directions.Up)
                            {
                                RideDone?.Invoke();
                                FreeRideDone?.Invoke();
                            }
                            Elevator.CurrentDirection = Directions.Down;
                        }
                        Elevator.CurrentFloor = i;
                        ClickedFloors[i - 1]  = false;
                        Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                        ElevatorMove?.Invoke(i);
                        break;
                    }
                }
            }
            else if (Elevator.ControlPanel.ClickedFloors.Contains(true))
            {
                if (CheckDirection() == Directions.None)
                {
                    for (int i = NumberOfFloors; i > Elevator.CurrentFloor; i--)
                    {
                        if (Elevator.ControlPanel.ClickedFloors[i - 1] == true)
                        {
                            Elevator.CurrentDirection = Directions.Up;
                            break;
                        }
                    }
                    for (int i = 1; i < Elevator.CurrentFloor; i++)
                    {
                        if (Elevator.ControlPanel.ClickedFloors[i - 1] == true)
                        {
                            Elevator.CurrentDirection = Directions.Down;
                            break;
                        }
                    }
                }

                if (CheckDirection() == Directions.Up)
                {
                    bool GoOppositeWay = true;
                    for (int i = Elevator.CurrentFloor; i <= NumberOfFloors; i++)
                    {
                        if (Elevator.ControlPanel.ClickedFloors[i - 1] == true)
                        {
                            Elevator.CurrentFloor = i;
                            ClickedFloors[i - 1]  = false;
                            Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                            foreach (Passenger passenger in Passengers)
                            {
                                if (passenger.State == States.Riding)
                                {
                                    passenger.InitialFloor = Elevator.CurrentFloor;
                                    UpdatePassengerData();
                                }
                            }
                            GoOppositeWay = false;
                            ElevatorMove?.Invoke(i);
                            break;
                        }
                    }
                    if (GoOppositeWay == true)
                    {
                        Elevator.CurrentDirection = Directions.Down;
                        //RideDone?.Invoke();
                        StatisticMaker.IncrementNumberOfFreeRides();
                        for (int i = Elevator.CurrentFloor; i > 0; i--)
                        {
                            if (Elevator.ControlPanel.ClickedFloors[i - 1] == true || ClickedFloors[i - 1] == true)
                            {
                                Elevator.CurrentFloor = i;
                                ClickedFloors[i - 1]  = false;
                                Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                                foreach (Passenger passenger in Passengers)
                                {
                                    if (passenger.State == States.Riding)
                                    {
                                        passenger.InitialFloor = Elevator.CurrentFloor;
                                        UpdatePassengerData();
                                    }
                                }
                                ElevatorMove?.Invoke(i);
                                break;
                            }
                        }
                    }
                }
                else if (CheckDirection() == Directions.Down)
                {
                    bool GoOppositeWay = true;
                    for (int i = Elevator.CurrentFloor; i > 0; i--)
                    {
                        if (Elevator.ControlPanel.ClickedFloors[i - 1] == true || ClickedFloors[i - 1] == true)
                        {
                            Elevator.CurrentFloor = i;
                            ClickedFloors[i - 1]  = false;
                            Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                            foreach (Passenger passenger in Passengers)
                            {
                                if (passenger.State == States.Riding)
                                {
                                    passenger.InitialFloor = Elevator.CurrentFloor;
                                    UpdatePassengerData();
                                }
                            }
                            GoOppositeWay = false;
                            ElevatorMove?.Invoke(i);
                            break;
                        }
                    }
                    if (GoOppositeWay == true)
                    {
                        Elevator.CurrentDirection = Directions.Up;
                        RideDone?.Invoke();
                        for (int i = Elevator.CurrentFloor; i <= NumberOfFloors; i++)
                        {
                            if (Elevator.ControlPanel.ClickedFloors[i - 1] == true)
                            {
                                Elevator.CurrentFloor = i;
                                ClickedFloors[i - 1]  = false;
                                Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                                foreach (Passenger passenger in Passengers)
                                {
                                    if (passenger.State == States.Riding)
                                    {
                                        passenger.InitialFloor = Elevator.CurrentFloor;
                                        UpdatePassengerData();
                                    }
                                }
                                GoOppositeWay = false;
                                ElevatorMove?.Invoke(i);
                                break;
                            }
                        }
                    }
                }
            }
        }