package com.gizwits.opensource.appkit.UserModule;

import java.util.Timer;
import java.util.TimerTask;

import com.gizwits.gizwifisdk.api.GizWifiSDK;
import com.gizwits.gizwifisdk.enumration.GizUserAccountType;
import com.gizwits.gizwifisdk.enumration.GizWifiErrorCode;
import com.gizwits.opensource.appkit.CommonModule.GosDeploy;
import com.gizwits.opensource.smartlight.R;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;

@SuppressLint("HandlerLeak")
public class GosForgetPasswordActivity extends GosUserModuleBaseActivity implements OnClickListener {

	/** The et Name */
	private EditText etName;

	/** The btn GetCode */
	private Button btnGetCode;

	/** The et Code */
	private EditText etCode;

	/** The et Psw */
	private EditText etPsw;

	/** The btn Register */
	private Button btnReset;

	/** The cb Laws */
	private CheckBox cbLaws;

	/**
	 * 验证码重发倒计时
	 */
	int secondleft = 60;

	/**
	 * The timer.
	 */
	Timer timer;

	/** 数据变量 */
	String name, code, psw;

	private enum handler_key {

		/** 获取验证码. */
		GETCODE,

		/** 提示信息 */
		TOAST,

		/** 手机验证码发送成功. */
		SENDSUCCESSFUL,

		/** 倒计时通知 */
		TICK_TIME,

		/** 重置密码 */
		RESET,
	}

	Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			super.handleMessage(msg);
			handler_key key = handler_key.values()[msg.what];
			switch (key) {
			case GETCODE:
				progressDialog.show();
				String AppSecret = GosDeploy.setAppSecret();
				GizWifiSDK.sharedInstance().requestSendPhoneSMSCode(AppSecret, msg.obj.toString());
				break;
			case TOAST:
				String successfulText = (String) getText(R.string.reset_successful);
				Toast.makeText(GosForgetPasswordActivity.this, msg.obj + "", 2000).show();

				if (msg.obj.toString().equals(successfulText)) {
					spf.edit().putString("UserName", name).commit();
					spf.edit().putString("PassWord", psw).commit();
					finish();
				}
				break;
			case SENDSUCCESSFUL:
				etName.setEnabled(false);
				etName.setTextColor(getResources().getColor(R.color.text_gray_light));
				isStartTimer();

				break;

			case TICK_TIME:
				String getCodeAgain = getString(R.string.getcode_again);
				String timerMessage = getString(R.string.timer_message);
				secondleft--;
				if (secondleft <= 0) {
					timer.cancel();
					btnGetCode.setBackgroundResource(R.drawable.btn_getcode_shape);
					// btnGetCode.setBackgroundDrawable(GosDeploy.setButtonBackgroundColor());
					btnGetCode.setTextColor(GosDeploy.setButtonTextColor());
					btnGetCode.setEnabled(true);
					btnGetCode.setText(getCodeAgain);
				} else {
					btnGetCode.setText(secondleft + timerMessage);
				}
				break;
			case RESET:
				progressDialog.show();
				GizWifiSDK.sharedInstance().resetPassword(name, code, psw, GizUserAccountType.GizUserPhone);
				break;
			}
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_gos_forget_password);
		// 设置ActionBar
		setActionBar(true, true, R.string.forget_password);

		initView();
		initEvent();
	}

	private void initView() {
		etName = (EditText) findViewById(R.id.etName);
		btnGetCode = (Button) findViewById(R.id.btnGetCode);
		etCode = (EditText) findViewById(R.id.etCode);
		etPsw = (EditText) findViewById(R.id.etPsw);
		btnReset = (Button) findViewById(R.id.btnReset);
		cbLaws = (CheckBox) findViewById(R.id.cbLaws);

		// 配置文件部署
		// btnGetCode.setBackgroundDrawable(GosDeploy.setButtonBackgroundColor());
		// btnGetCode.setTextColor(GosDeploy.setButtonTextColor());
		btnReset.setBackgroundDrawable(GosDeploy.setButtonBackgroundColor());
		btnReset.setTextColor(GosDeploy.setButtonTextColor());

	}

	private void initEvent() {
		final Timer etTimer = new Timer();
		etTimer.schedule(new TimerTask() {

			@Override
			public void run() {
				etName.requestFocus();
				InputMethodManager imm = (InputMethodManager) etName.getContext()
						.getSystemService(Context.INPUT_METHOD_SERVICE);
				imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
				etTimer.cancel();

			}
		}, 500);

		btnGetCode.setOnClickListener(this);
		btnReset.setOnClickListener(this);

		cbLaws.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				String psw = etPsw.getText().toString();

				if (isChecked) {
					etPsw.setInputType(0x90);
				} else {
					etPsw.setInputType(0x81);
				}
				etPsw.setSelection(psw.length());
			}
		});
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btnGetCode:
			name = etName.getText().toString();
			if (TextUtils.isEmpty(name)) {
				Toast.makeText(GosForgetPasswordActivity.this, R.string.toast_name_wrong, 2000).show();
				return;
			}
			Message msg = new Message();
			msg.obj = name;
			msg.what = handler_key.GETCODE.ordinal();
			handler.sendMessage(msg);
			break;

		case R.id.btnReset:
			name = etName.getText().toString();
			code = etCode.getText().toString();
			psw = etPsw.getText().toString();
			if (TextUtils.isEmpty(name)) {
				Toast.makeText(GosForgetPasswordActivity.this, R.string.toast_name_wrong, 2000).show();
				return;
			}
			if (code.length() != 6) {
				Toast.makeText(GosForgetPasswordActivity.this, R.string.no_getcode, 2000).show();
				return;
			}
			if (TextUtils.isEmpty(psw)) {
				Toast.makeText(GosForgetPasswordActivity.this, R.string.toast_psw_wrong, 2000).show();
				return;
			}
			if (psw.length() < 6) {
				Toast.makeText(GosForgetPasswordActivity.this, R.string.toast_psw_short, 2000).show();
				return;
			}
			handler.sendEmptyMessage(handler_key.RESET.ordinal());

			break;
		}
	}

	/** 手机验证码回调 */
	@Override
	protected void didRequestSendPhoneSMSCode(GizWifiErrorCode result, String token) {
		progressDialog.cancel();
		Message msg = new Message();
		if (GizWifiErrorCode.GIZ_SDK_SUCCESS != result) {
			// String sendFailed = (String) getText(R.string.send_failed);
			msg.what = handler_key.TOAST.ordinal();
			msg.obj = toastError(result);// sendFailed + "\n" +
											// errorMessage;toastError(errorCode)
			handler.sendMessage(msg);
		} else {
			handler.sendEmptyMessage(handler_key.SENDSUCCESSFUL.ordinal());
			msg.what = handler_key.TOAST.ordinal();
			String sendSuccessful = (String) getText(R.string.send_successful);
			msg.obj = sendSuccessful;
			handler.sendMessage(msg);
		}
	}

	/** 重置密码回调 */
	@Override
	public void didChangeUserPassword(GizWifiErrorCode result) {
		progressDialog.cancel();
		Message msg = new Message();
		if (GizWifiErrorCode.GIZ_SDK_SUCCESS != result) {
			// String resetFailed = (String) getText(R.string.reset_failed);
			msg.what = handler_key.TOAST.ordinal();
			msg.obj = toastError(result);// resetFailed + "\n" + errorMessage;
			handler.sendMessage(msg);
		} else {
			msg.what = handler_key.TOAST.ordinal();
			String resetSuccessful = (String) getText(R.string.reset_successful);
			msg.obj = resetSuccessful;
			handler.sendMessage(msg);
		}
	}

	/**
	 * 倒计时
	 */
	public void isStartTimer() {
		btnGetCode.setEnabled(false);
		btnGetCode.setBackgroundResource(R.drawable.btn_getcode_shape_gray);
		secondleft = 60;
		timer = new Timer();
		timer.schedule(new TimerTask() {

			@Override
			public void run() {
				handler.sendEmptyMessage(handler_key.TICK_TIME.ordinal());
			}
		}, 1000, 1000);
	}

}