package com.developerphil.adbidea.compatibility;

import com.android.ddmlib.IDevice;
import com.android.sdklib.AndroidVersion;
import com.android.sdklib.IAndroidTarget;
import com.android.tools.idea.run.AndroidDevice;
import com.android.tools.idea.run.LaunchCompatibility;
import org.joor.Reflect;

import java.util.EnumSet;

// Up until android studio 2.0 preview 8
public class CanRunOnDeviceCompatBefore2_0 extends BackwardCompatibleGetter<LaunchCompatibility> {

    private final AndroidVersion myMinSdkVersion;
    private final IAndroidTarget myProjectTarget;
    private final EnumSet<IDevice.HardwareFeature> myRequiredHardwareFeatures;
    private final IDevice device;

    public CanRunOnDeviceCompatBefore2_0(AndroidVersion myMinSdkVersion, IAndroidTarget myProjectTarget, EnumSet<IDevice.HardwareFeature> myRequiredHardwareFeatures, IDevice device) {
        this.myMinSdkVersion = myMinSdkVersion;
        this.myProjectTarget = myProjectTarget;
        this.myRequiredHardwareFeatures = myRequiredHardwareFeatures;
        this.device = device;
    }

    @Override
    // Android studio 1.5+
    protected LaunchCompatibility getCurrentImplementation() throws Throwable {
        AndroidDevice androidDevice = Reflect.on("com.android.tools.idea.run.ConnectedAndroidDevice").create(device, null).get();
        return Reflect.on(LaunchCompatibility.class).call("canRunOnDevice", myMinSdkVersion, myProjectTarget, myRequiredHardwareFeatures, androidDevice, null).get();
    }

    @Override
    // Android Studio 1.4-
    protected LaunchCompatibility getPreviousImplementation() {
        return Reflect.on(LaunchCompatibility.class).call("canRunOnDevice", myMinSdkVersion, myProjectTarget, myRequiredHardwareFeatures, device, null).get();
    }
}