public static async Task Execute(this VehicleAction action, TeslaVehicle vehicle, ITeslaAPIWrapper teslaApi)
        {
            LogUtil.Debug($"Start Executing {action.Type.GetDescription()}");
            // TODO remaining actions
            switch (action.Type)
            {
            case VehicleActionType.WakeUp:
                await teslaApi.WakeUp(vehicle);

                break;

            case VehicleActionType.ClimateACStart:
                await teslaApi.StartAutoConditioning(vehicle);

                break;

            case VehicleActionType.ClimateACStop:
                await teslaApi.StopAutoConditioning(vehicle);

                break;

            case VehicleActionType.ClimateSetTemps:
                var driverTemp    = (double)action.Params["driver_temp"];
                var passengerTemp = (double)action.Params["passenger_temp"];
                await teslaApi.SetTemps(vehicle, driverTemp, passengerTemp);

                break;

            case VehicleActionType.ClimateHeatedSeat:
                var heater = (int)action.Params["heater"];
                var level  = (int)action.Params["level"];
                await teslaApi.SeatHeaterRequest(vehicle, heater, level);

                break;

            case VehicleActionType.ClimateHeatedSteeringWheel:
                var on = (bool)action.Params["on"];
                await teslaApi.SteeringWheelHeaterRequest(vehicle, on);

                break;

            case VehicleActionType.ChargingStart:
                await teslaApi.ChargeStart(vehicle);

                break;

            case VehicleActionType.ChargingStop:
                await teslaApi.ChargeStop(vehicle);

                break;

            case VehicleActionType.ChargingSetLimit:
                var percent = (int)action.Params["percent"];
                await teslaApi.SetChargeLimit(vehicle, percent);

                break;

            case VehicleActionType.ChargingOpenPort:
                await teslaApi.ChargePortOpen(vehicle);

                break;

            case VehicleActionType.ChargingClosePort:
                await teslaApi.ChargePortClose(vehicle);

                break;

            case VehicleActionType.ControlsDoorsLock:
                await teslaApi.DoorLock(vehicle);

                break;

            case VehicleActionType.ControlsDoorsUnlock:
                await teslaApi.DoorUnlock(vehicle);

                break;

            case VehicleActionType.ControlsFlashLights:
                await teslaApi.FlashLights(vehicle);

                break;

            case VehicleActionType.ControlsHonkHorn:
                await teslaApi.HonkHorn(vehicle);

                break;

            case VehicleActionType.ControlsFrontTrunk:
                await teslaApi.ActuateTrunk(vehicle, "front");

                break;

            case VehicleActionType.ControlsRearTrunk:
                await teslaApi.ActuateTrunk(vehicle, "rear");

                break;

            case VehicleActionType.ControlsSunRoof:
                var state = (string)action.Params["state"];
                await teslaApi.SunRoofControl(vehicle, state);

                break;

            case VehicleActionType.RemoteStartDrive:

            case VehicleActionType.SpeedLimitActivate:

            case VehicleActionType.SpeedLimitClearPin:

            case VehicleActionType.SpeedLimitDeactivate:

            case VehicleActionType.SpeedLimitSet:

            case VehicleActionType.ValetModeResetPin:

            case VehicleActionType.ValetModeSet:
                Thread.Sleep(500);
                break;
            }
            LogUtil.Debug($"Finished Executing {action.Type.GetDescription()}");
        }
        public static async Task CustomizeOrReturn(this VehicleActionType actionType, Profile profile, VehicleAction action, INavigation navigation, IProfileService profileService)
        {
            switch (actionType)
            {
            case VehicleActionType.ClimateACStart:
            case VehicleActionType.ClimateACStop:
            case VehicleActionType.ChargingStart:
            case VehicleActionType.ChargingStop:
            case VehicleActionType.ChargingOpenPort:
            case VehicleActionType.ChargingClosePort:
            case VehicleActionType.ControlsDoorsLock:
            case VehicleActionType.ControlsDoorsUnlock:
            case VehicleActionType.ControlsFlashLights:
            case VehicleActionType.ControlsHonkHorn:
            case VehicleActionType.ControlsFrontTrunk:
            case VehicleActionType.RemoteStartDrive:
            case VehicleActionType.SpeedLimitActivate:
            case VehicleActionType.SpeedLimitClearPin:
            case VehicleActionType.SpeedLimitDeactivate:
            case VehicleActionType.ValetModeResetPin:
            case VehicleActionType.ValetModeSet:
                profile.Actions.Add(new VehicleAction
                {
                    Type = actionType,
                });
                await profileService.UpsertProfileAsync(profile);

                await navigation.PopAsync();

                break;

            case VehicleActionType.ClimateSetTemps:
                await navigation.PushAsync(new ConfigureClimateSetTemps(profile, actionType, action, profileService));

                break;

            case VehicleActionType.ClimateHeatedSeat:
            case VehicleActionType.ClimateHeatedSteeringWheel:
            case VehicleActionType.ChargingSetLimit:
            case VehicleActionType.ControlsRearTrunk:
            case VehicleActionType.ControlsSunRoof:
            case VehicleActionType.SpeedLimitSet:
                //await navigation.PushAsync(new ConfigureActionBasePage(profile, actionType, action));
                break;
            }
        }