private void VehicleCheckIn() { string licenseNumber = UI.GetLicenseNumberInput(); bool isVehicleListed = m_Garage.IsVehicleListed(licenseNumber); try { if (isVehicleListed) { string vehicleState = UI.GetVehicleStateInput(); m_Garage.ChangeVehicleStatus(licenseNumber, vehicleState); UI.ShowVehicleNewState(vehicleState); } else { string ownerName = UI.GetOwnerNameInput(); string ownerPhoneNumber = UI.GetOwnerPhoneNumber(); string vehicleType = UI.GetVehicleTypeInput(m_Garage.GetSupportedVehiclesList()); List <string> requiredFieldsList = m_Garage.GetFieldsByVehicleType(vehicleType); Dictionary <string, string> requiredFieldsMap = GenerateMapAccordingToList(requiredFieldsList, vehicleType); m_Garage.AddVehicleRecord(licenseNumber, ownerName, ownerPhoneNumber, requiredFieldsMap, vehicleType); UI.PrintSuccess(); } } catch (ArgumentException argumentException) { Console.WriteLine(argumentException.Message); VehicleCheckIn(); } catch (ValueOutOfRangeException valueOutOfRangeException) { Console.WriteLine(valueOutOfRangeException.Message); VehicleCheckIn(); } catch (FormatException formatException) { Console.WriteLine(formatException.Message); VehicleCheckIn(); } }