package com.dbs.mplus.fatima.view.popup;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.dbs.mplus.fatima.MPlusConstants;
import com.dbs.mplus.fatima.framework.MPlusFrameworkConstants;
import com.dbs.mplus.fatima.framework.util.MPlusLogUtil;
import com.dbs.mplus.fatima.framework.util.MPlusServiceUtil;
import com.dbs.mplus.fatima.framework.util.MPlusStringUtil;
import com.dbs.mplus.fatima.framework.view.popup.MPlusNotifyActivity;
import com.dbs.mplus.fatima.MPlusApplication;
import com.dbs.mplus.fatima.R;
import com.dbs.mplus.fatima.util.AddrUtil;
import com.dbs.mplus.fatima.util.IntentUtil;
/**
 * push가 오면 메시지를 보여줄 화면 
 * @author sungchul 
 *
 */
public class MPlusNotifyPopupActivity extends MPlusNotifyActivity {


	@Override
	protected void beforeProcessAction() {
		super.setIconImage(R.drawable.icon);
	}
	
	@Override 
	protected void processAction(Intent intent) { 
		// 버튼 
		Button button = null; 
		// 창닫기
		button = super.getNoButton();
		
		final String action = intent.getAction(); 
		final Bundle bundle = intent.getExtras(); 
		
		// 예외상황 
		if(MPlusStringUtil.isEmpty(action)) {
			return; 
		}
		
		switch(action) {
		case MPlusFrameworkConstants.ACTION_PUSH : // push
			this.processPushMessage(bundle.getString(MPlusConstants.KEY_NOTI_PUSH_TITLE));
			break;
			
		case MPlusConstants.ACTION_VERSION_UP : // 앱 버전업
			{
				// URL 꺼내고 
				final String url = bundle.getString(MPlusConstants.PARAM_VERSION_UP_MARKET_URL);
				
				if(!MPlusStringUtil.isEmpty(url)) {
					this.processVersionUp(url);		
				}
				// 발생하지 않을 일 
				else {
					MPlusLogUtil.ERROR(this.getClass(), "url = " + url);
				}
			}
			break; 
			
		case MPlusConstants.ACTION_ALERT : // 일반 알림 텍스트인 경우
			{
				// 보여줄 메시지 꺼내고 
				final String text = bundle.getString(MPlusConstants.PARAM_ALERT_TEXT);
				// 보여주기 
				this.processEmpty(text);				
			}
			break; 
			
		case MPlusConstants.ACTION_APP_KILL : // 앱 종료인 경우
			{
				final String message = bundle.getString(MPlusConstants.PARAM_APP_KILL_TEXT);
				// 처리하기 
				this.processAppKill(message);
			}
			break;

		case MPlusConstants.ACTION_INSTALL_PACKAGE : // 패키지 설치 여부를 물어보는 경우
			{
				final String packageName = bundle.getString(MPlusConstants.PARAM_INSTALL_PACKAGE_NAME);
				final String url = bundle.getString(MPlusConstants.PARAM_INSTALL_PACKAGE_URL);
				final String message = this.getString(R.string.install_package, packageName);

				// 처리하기
				this.processInstallPackage(message, url);
			}
			break;
			
		default : 
			MPlusLogUtil.ERROR(this.getClass(), "action : " + action);
			break; 
		}
	}
	
	/**
	 * 버전엽 처리 
	 * @param targetUrl
	 */
	private void processVersionUp(String targetUrl) { 
		// 메시지 표현 
		final TextView tv = super.getTextView(); 
		tv.setText(this.getString(R.string.info_new_version));
		
		// 닫기버튼은 없게 
		super.setViewOnlyYesButton(); 
		// 업데이트 버튼 
		final Button button = super.getYesButton(); 
		// 리스너 달고 
		button.setOnClickListener(new PackageInstallButtonListener(targetUrl));
		// 설치하기로 버튼 레이블 바꾸기 
		button.setText(this.getString(R.string.install_button_str));
	}
	
	/**
	 * 예외용 
	 */
	private void processEmpty(String message) { 
		// push 메시지 표현 
		final TextView tv = super.getTextView(); 
		tv.setText(message);
		
		// 보기버튼 필요없음 
		super.setViewOnlyNoButton();
	}

	/**
	 * push 메시지 보여줄때의 처리  
	 * @param message
	 */
	private void processPushMessage(String message) { 
		// push 메시지 표현 
		final TextView tv = super.getTextView(); 
		tv.setText(message);
		
		// 버튼 
		Button button = null; 
	
		// 앱시작 
		button = super.getYesButton(); 
		button.setOnClickListener(new HelperButtonClickListener());		
	}
	
	/**
	 * 앱 종료 처리용 
	 * @param message
	 */
	private void processAppKill(String message) { 
		// 메시지 보여주고 
		final TextView tv = super.getTextView(); 
		tv.setText(message);	
		
		// 보기버튼만 보이도록 설정하고 
		super.setViewOnlyYesButton(); 
		
		
		// 보기 버튼에 리스너 달기 
		final Button button = super.getYesButton(); 
		button.setOnClickListener(new AppKillButtonClickListener());
		// 보기 대신에 확인으로 text가 보이게 하고 
		button.setText(this.getString(R.string.mf_ok_button_str));
	}

	/**
	 * 패키지 설치용
	 * @param message
	 * @param url
	 */
	private void processInstallPackage(String message, String url) {
		// 메시지 보여주고
		final TextView tv = super.getTextView();
		tv.setText(message);

		// 버튼은 모두 보이면 되고
		// 설치하기 버튼은 이름 바꾸고 리스너 달아주어야 하고
		final Button button = super.getYesButton();
		// 리스너 달고
		button.setOnClickListener(new PackageInstallButtonListener(url));
		// 설치하기로 버튼 레이블 바꾸기
		button.setText(this.getString(R.string.install_button_str));
	}


	/**
	 * 웰컴 호출용
	 *
	 * @author aple
	 *
	 */
	class WelcomeButtonClickListener implements OnClickListener {
		private final String event;
		/**
		 * 생성자
		 * @param event 발생한 비콘 이벤트
		 */
		public WelcomeButtonClickListener(String event) {
			this.event = event;
		}

		@Override
		public void onClick(View v) {
			final Context context = MPlusNotifyPopupActivity.this.getApplicationContext();

			// push 메시지에 의해 지정된 url을 시작하라는 의미임
			final Intent i = IntentUtil.getBrowsingIntent(context, AddrUtil.getNotifyEventPage() + "?event=" + this.event);
			i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
			context.startActivity(i);

			// 도우미로 전이될꺼니까 알림바 내용 지우고
			MPlusServiceUtil.cancelAllNotification(context);

			// 현재 화면은 닫고
			MPlusNotifyPopupActivity.this.finish();
		}
	}

	/**
	 * 도우미로 가기용 
	 * 
	 * @author aple
	 *
	 */
	class HelperButtonClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			final Context context = MPlusNotifyPopupActivity.this.getApplicationContext();
			
			// push 메시지에 의해 지정된 url을 시작하라는 의미임 
			final Intent i = IntentUtil.getStartApp(context, MPlusConstants.ACTION_PUSH, AddrUtil.getHelperPage());
			context.startActivity(i); 
			
			// push를 본거고, 도우미로 갈꺼니까 알림바 내용 지우고 
			MPlusServiceUtil.cancelAllNotification(context);
			
			// 현재 화면은 닫고 
			MPlusNotifyPopupActivity.this.finish();
		} 
	}
	
	/**
	 * 앱 버전업 처리 
	 * @author aple
	 *
	 */
	class PackageInstallButtonListener implements OnClickListener {
		private final String targetUrl; 
		/**
		 * 생성자 
		 * @param targetUrl
		 */
		public PackageInstallButtonListener(String targetUrl) {
			this.targetUrl = targetUrl; 
		}
		
		@Override
		public void onClick(View view) {
			final Context context = MPlusNotifyPopupActivity.this.getApplicationContext();
			
			// 다운로드 받을 수 있도록 activity 띄워주고 
			if(this.targetUrl.startsWith("market")) {
				context.startActivity(IntentUtil.getOpenMarketIntent(this.targetUrl));
			}
			else {
				context.startActivity(IntentUtil.getSystemBrowsingIntent(this.targetUrl));
			} 
		} 		
	}
	
	/**
	 * 닫기버튼용 
	 * @author aple
	 *
	 */
	class CloseButtonListener implements OnClickListener {
		@Override  
		public void onClick(View v) { 
			MPlusNotifyPopupActivity.this.finish();
		}
	}
	
	/**
	 * 앱 종료 호출용 
	 * @author aple
	 *
	 */
	class AppKillButtonClickListener implements OnClickListener {

		@Override
		public void onClick(View view) {
			// 현재 창 닫고 
			MPlusNotifyPopupActivity.this.moveTaskToBack(true);
			MPlusNotifyPopupActivity.this.finish();
			
			// 홈 불러주고 
			final MPlusApplication app = (MPlusApplication) MPlusNotifyPopupActivity.this.getApplication();
			app.startActivity(IntentUtil.getHomeIntent());    
			
			// 프로세스 죽이기 (PnT 서비스를 죽이기 위함) 
			android.os.Process.killProcess(android.os.Process.myPid()); 
		} 		
	}		
}
