public DataExtractor(eValidVehicle vehicleType, string licenseNumber)
        {
            VehicleType   = vehicleType;
            LicenseNumber = licenseNumber ?? throw new ArgumentNullException(nameof(licenseNumber));

            Console.WriteLine("Please enter your name:");
            OwnerName = Console.ReadLine();
            Console.WriteLine("Please enter your phone number:");
            OwnerNumber = Console.ReadLine();
            Console.WriteLine("Enter model name:");
            Model = Console.ReadLine();
            Console.WriteLine("Enter wheel manufacturer:");
            WheelManufacturer = Console.ReadLine();
            getExtraDetails();
            getVechicleSpecificDetails();
        }
        public ComposedVehicle CreateTruck(
            eValidVehicle i_eValidVehicle,
            string i_OwnerName,
            string i_OwnerPhoneNumber,
            string i_LicenseNumber,
            string i_ModelName,
            string i_WheelManufacturer,
            float i_WheelPressure,
            float i_CurrentPower,
            float i_TruckCapacity,
            bool i_IsCooled)
        {
            Vehicle         vehicle         = VehicleFactory.CreateTruck(i_ModelName, i_LicenseNumber, i_WheelManufacturer, i_WheelPressure, i_CurrentPower, i_TruckCapacity, i_IsCooled);
            ComposedVehicle composedVehicle = new ComposedVehicle(vehicle, i_OwnerName, i_OwnerPhoneNumber);

            return(composedVehicle);
        }
        public ComposedVehicle CreateMotorcycle(
            eValidVehicle i_eValidVehicle,
            string i_OwnerName,
            string i_OwnerPhoneNumber,
            string i_LicenseNumber,
            string i_ModelName,
            string i_WheelManufacturer,
            float i_WheelPressure,
            float i_CurrentPower,
            eLicencseType i_eLicenseType,
            int i_EngineCapacity)
        {
            Vehicle         vehicle;
            ComposedVehicle composedVehicle;

            if (i_eValidVehicle == eValidVehicle.RegMotorCycle)
            {
                vehicle = VehicleFactory.CreateMotorcycle(
                    i_ModelName,
                    i_LicenseNumber,
                    i_WheelManufacturer,
                    i_WheelPressure,
                    i_CurrentPower,
                    i_eLicenseType,
                    i_EngineCapacity);
            }
            else
            {
                vehicle = VehicleFactory.CreateElectricMotorcycle(
                    i_ModelName,
                    i_LicenseNumber,
                    i_WheelManufacturer,
                    i_WheelPressure,
                    i_CurrentPower,
                    i_eLicenseType,
                    i_EngineCapacity);
            }

            composedVehicle = new ComposedVehicle(vehicle, i_OwnerName, i_OwnerPhoneNumber);

            return(composedVehicle);
        }
        public ComposedVehicle CreateAutomobile(
            eValidVehicle i_eValidVehicle,
            string i_OwnerName,
            string i_OwnerPhoneNumber,
            string i_LicenseNumber,
            string i_ModelName,
            string i_WheelManufacturer,
            float i_WheelPressure,
            float i_CurrentPower,
            eColor i_eColor,
            eNumOfDoors i_eNumOfDoors)
        {
            Vehicle         vehicle;
            ComposedVehicle composedVehicle;

            if (i_eValidVehicle == eValidVehicle.RegCar)
            {
                vehicle = VehicleFactory.CreateAutomobile(
                    i_ModelName,
                    i_LicenseNumber,
                    i_WheelManufacturer,
                    i_WheelPressure,
                    i_CurrentPower,
                    i_eColor,
                    i_eNumOfDoors);
            }
            else
            {
                vehicle = VehicleFactory.CreateElectricAutomobile(
                    i_ModelName,
                    i_LicenseNumber,
                    i_WheelManufacturer,
                    i_WheelPressure,
                    i_CurrentPower,
                    i_eColor,
                    i_eNumOfDoors);
            }

            composedVehicle = new ComposedVehicle(vehicle, i_OwnerName, i_OwnerPhoneNumber);

            return(composedVehicle);
        }
        // $G$ DSN-007 (-5) This method is too long, it should have been split into several methods.
        // $G$ DSN-011 (-7) The component responsible for creating vehicles should be implemented in the Logic project...
        private void insertVehicleFlow(string i_License)
        {
            bool            isVehicleInserted = false;
            int             selection         = getSelection(k_InsertVehicleTypeSelect, validCarTypeMenu);
            eValidVehicle   validVehicle      = (eValidVehicle)selection;
            ComposedVehicle vehicleToInsert   = null;

            if (GM.IsVehicleInGarage(i_License))
            {
                // print active car menu
                Console.WriteLine("The status of vehicle with the license {0} was changed to repair.", i_License);
                GM.ChangeVehicleStatus(i_License, eVehicleStatus.OnRepair);
            }
            else
            {
                // car not in garage - print "enter full details".
                DataExtractor dataExtractor = new DataExtractor(validVehicle, i_License);
                try
                {
                    if (validVehicle == eValidVehicle.ElectricalCar || validVehicle == eValidVehicle.RegCar)
                    {
                        vehicleToInsert = GM.CreateAutomobile(
                            dataExtractor.VehicleType,
                            dataExtractor.OwnerName,
                            dataExtractor.OwnerNumber,
                            dataExtractor.LicenseNumber,
                            dataExtractor.Model,
                            dataExtractor.WheelManufacturer,
                            dataExtractor.CurrentWheelPressure,
                            dataExtractor.PowerLeft,
                            dataExtractor.EColor,
                            dataExtractor.ENumOfDoors);
                    }
                    else if (validVehicle == eValidVehicle.RegMotorCycle ||
                             validVehicle == eValidVehicle.ElectricalCycle)
                    {
                        vehicleToInsert = GM.CreateMotorcycle(
                            dataExtractor.VehicleType,
                            dataExtractor.OwnerName,
                            dataExtractor.OwnerNumber,
                            dataExtractor.LicenseNumber,
                            dataExtractor.Model,
                            dataExtractor.WheelManufacturer,
                            dataExtractor.CurrentWheelPressure,
                            dataExtractor.PowerLeft,
                            dataExtractor.ELicenseType,
                            dataExtractor.EngineSize);
                    }
                    else
                    {
                        vehicleToInsert = GM.CreateTruck(
                            dataExtractor.VehicleType,
                            dataExtractor.OwnerName,
                            dataExtractor.OwnerNumber,
                            dataExtractor.LicenseNumber,
                            dataExtractor.Model,
                            dataExtractor.WheelManufacturer,
                            dataExtractor.CurrentWheelPressure,
                            dataExtractor.PowerLeft,
                            dataExtractor.TruckCapacity,
                            dataExtractor.IsCooled);
                    }

                    isVehicleInserted = GM.InsertVehicle(vehicleToInsert);

                    if (isVehicleInserted)
                    {
                        Console.WriteLine("Vehicle with license {0} has entered the garage.", i_License);
                        System.Threading.Thread.Sleep(1000);
                    }
                }
                catch (ValueOutOfRangeException voore)
                {
                    Console.WriteLine(voore.Message);
                    Console.WriteLine("Vehicle was not added");
                }
            }
        }