package com.dbs.mplus.fatima;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.content.LocalBroadcastManager;

import com.dbs.mplus.fatima.framework.util.MPlusDeviceUtil;
import com.dbs.mplus.fatima.framework.util.MPlusGCMUtil;
import com.dbs.mplus.fatima.framework.util.MPlusLogUtil;
import com.dbs.mplus.fatima.framework.util.MPlusPreferenceUtil;
import com.dbs.mplus.fatima.framework.util.MPlusStringUtil;
import com.dbs.mplus.fatima.framework.view.dialog.MPlusDialog;
import com.dbs.mplus.fatima.receiver.LoadingStepReceiver;
import com.dbs.mplus.fatima.util.IntentUtil;

/**
 * 앱 시작 시 로딩화면
 * @author hyeeun
 */
public class LoadingActivity extends Activity {
	private LoadingStepReceiver loadingReceiver;


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.activity_loading);

		MPlusLogUtil.DEBUG(this.getClass(), "onCreate");
	}



	@Override
	protected void onStart() {
		super.onStart();

		// 로컬 저장소 접근 준비
		final MPlusPreferenceUtil p = MPlusPreferenceUtil.getInstance(this.getApplicationContext());

		// 도메인 선택
		MPlusConstants.SERVICE_URL = p.getRecentDomain(MPlusConstants.SERVICE_URL);


		// Token확인 응답을 받을 수 있는 리시버 생성
		if(this.loadingReceiver == null) {
			this.loadingReceiver = new LoadingStepReceiver(this);
		}

		// 리스너 등록
		final LocalBroadcastManager m = LocalBroadcastManager.getInstance(this);
		if(m != null) {
			final IntentFilter filter = new IntentFilter();
			filter.addAction(MPlusConstants.ACTION_TOKEN_PREPARE);
			filter.addAction(MPlusConstants.ACTION_VERSION_CHECK);

			// token 관련
			m.registerReceiver(this.loadingReceiver, filter);
		}

		// 한번 시작 인텐트를 꺼내놓고
		final Intent intent = this.getIntent();

		// 시작 페이지 정리
		if(intent == null) {
			p.setStartPage("");
		}
		else {
			final String action = intent.getAction();
			// push 메시지에 의해 시작되는 경우
			if(MPlusConstants.ACTION_PUSH.equals(action)) {
				// 시작페이지 가져와서
				final String startUrl = intent.getStringExtra(MPlusConstants.PARAM_START_URL);
				// 다시 사용할 수 있도록 저장
				if(!MPlusStringUtil.isEmpty(startUrl)) {
					p.setStartPage(startUrl);
					//MPlusLogUtil.DEBUG(this.getClass(), "시작페이지 저장 : " + startUrl);
				}
			}
			// 기타
			else {
				p.setStartPage("");
				MPlusLogUtil.DEBUG(this.getClass(), "index.page로 가야할 운명임");
			}
		}

//		MPlusLogUtil.DEBUG(LoadingActivity.class, MPlusServiceUtil.getActivityStackList(this));

		Handler hd = new Handler();
		hd.postDelayed(new Runnable() {
			public void run() {
				loadingStep1();
			}
		} , 2000); // 3초 후에 hd Handler 실행
	}

	@Override
	protected void onStop() {
		super.onStop();
		MPlusLogUtil.DEBUG(this.getClass(), "onStop");

		final LocalBroadcastManager m = LocalBroadcastManager.getInstance(this);
		if(m != null) {
			m.unregisterReceiver(this.loadingReceiver);
		}
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		MPlusLogUtil.DEBUG(this.getClass(), "onDestroy");
	}

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		this.setIntent(intent);
	}

	/**
	 * 앱 시작시 체크해야할 모든것들
	 */
	private void loadingStep1() {
		final boolean bNetwork = MPlusDeviceUtil.getInstance().isOnline(this.getApplicationContext());
		if(!bNetwork) {
			MPlusLogUtil.DEBUG(this.getClass(), "네트워크가 켜지지 않아서 켜러 가야함.");
			// 여기에 dialog를 넣고 싶은데..
			MPlusDialog.getOKDialog(this, this.getString(R.string.title_error), this.getString(R.string.error_network),
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							final Intent intent = IntentUtil.getSettingIntent();
							LoadingActivity.this.startActivity(intent);
							LoadingActivity.this.finish();
							// dialog 닫기
							dialog.dismiss();
						}
					}
			).show();

			return;
		}
		MPlusLogUtil.DEBUG(this.getClass(), "네트워크확인완료");

		// google play service 가능한지 확인
		final String playErrorMsg = this.getString(R.string.error_google_play);
		if(!MPlusGCMUtil.isGooglePlayServiceAvailable(this, playErrorMsg)) {
			// 구글 플레이 서비스를 사용할 수 없음을 알리고
			MPlusDialog.getOKDialog(this, this.getString(R.string.title_error),
					this.getString(R.string.error_google_play),
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							final Intent intent = IntentUtil.getOpenMarketIntent("market://details?id=com.google.android.gms");
							LoadingActivity.this.startActivity(intent);
							LoadingActivity.this.finish();
							// 사용자가 구글 플레이 업뎃 버튼을 누르면 MCare는 사라져야함.
							// 계속 남아있는데 구글 플레이 갔다가 업데이트 포기하고 돌아오는 경우
							// MCare 화면이 뜬 상태로 계속 뺑뺑이가 돌고 있을 것이다.
						}
					}).show();
		}

		final LocalBroadcastManager m = LocalBroadcastManager.getInstance(this);
		// WIFI 연결 확인
		final boolean bWIFI = MPlusDeviceUtil.getInstance().checkWIFI(this, MPlusConstants.WIFI_SSID);
		// 미리 설정한 WIFI로 연결이 안됐으면
		if(!bWIFI) {
			MPlusLogUtil.DEBUG(this.getClass(), MPlusConstants.WIFI_SSID + "WIFI에 연결해야함.");
			// Alert 창 띄움
			MPlusDialog.getOKDialog(this, "Wi-Fi 설정확인", "Wi-Fi 설정이 '" + MPlusConstants.WIFI_SSID + "'으로 설정되어 있는지 확인 바랍니다.",
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							m.sendBroadcast(IntentUtil.getVersionCheckIntent());
							dialog.dismiss();
						}
					}
			).show();
			return;
		} else {
			m.sendBroadcast(IntentUtil.getVersionCheckIntent());
		}
		MPlusLogUtil.DEBUG(this.getClass(), "WIFI 연결확인완료");
	}
}