package com.dbs.mplus.fatima.framework.task;

import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;

import com.dbs.mplus.fatima.framework.exception.MPlusFrameworkException;
import com.dbs.mplus.fatima.framework.util.MPlusDeviceUtil;
import com.dbs.mplus.fatima.framework.util.MPlusHttpsClientUtil;
import com.dbs.mplus.fatima.framework.util.MPlusLogUtil;

import org.json.JSONObject;

/**
 * 버전확인 
 * @author hyeeun 
 *
 */
public class MPlusVersionCheckTask extends AsyncTask<Void, Void, Object> {
	private final Activity activity; 
	private final String versionPage; 
	private final String appName; 
	
	/**
	 * 생성자 
	 * @param activity
	 * @param versionPage 
	 * @param appName 
	 */
	public MPlusVersionCheckTask(Activity activity, String versionPage, String appName) {
		this.activity = activity; 
		this.versionPage = versionPage; 
		this.appName = appName; 
	}

	/**
	 * 버전확인 실행 
	 * @return 설치유도필요시 : 설치유도에 필요한 json 메시지, 오류발생시 : 예외, 설치유도필요없는 경우 : null 
	 */
	@Override
	protected Object doInBackground(Void... params) { 
		final Context context = this.activity.getApplicationContext(); 
		// uuid 
		final String uuid = MPlusDeviceUtil.getDeviceUUID(context);
		JSONObject resObj = null; 
		
		try{ 
			// http 요청보내서 응답 받아오고 
			final String res = MPlusHttpsClientUtil.requestAppVersion(this.versionPage, this.appName, uuid);
			MPlusLogUtil.DEBUG(this.getClass(), "버전확인 주소 : " + this.versionPage + ", 응답 : " + res);
			
			// 응답 유효성 확인 
			if(res == null) { 
				return new MPlusFrameworkException("버전확인 실패");
			}
			
			// 응답을 json으로 바꾸기 
			resObj = new JSONObject(res); 
		}
		catch(final Exception ex) {
			// 에러 메시지 반환 
			MPlusLogUtil.ERROR(this.getClass(), "버전확인 오류 발생", ex);
			return ex; 
		}
		
		// 서버에서 에러를 뱉었나? 
		if(resObj.has("error")) { 
			MPlusFrameworkException ex = null;
			
			try { 
				ex = new MPlusFrameworkException(resObj.getString("error"));
			}
			catch(final Exception e) { 
				ex = new MPlusFrameworkException("버전확인 실패");
			}
			
			return ex; 
		}
		
		int newVersion = -1; 
		int installVersion = -1; 
		
		// 받아온 버전 확인 
		try { 
			newVersion = resObj.getInt("versionOrder");
			installVersion = MPlusDeviceUtil.getAppVersionName(this.activity.getApplicationContext());
		}
		catch(final Exception ex) { 
			MPlusLogUtil.ERROR(this.getClass(), "버전확인실패", ex);
			return ex; 
		}
        
        // 설치된 버전보다 받아온 버전이 더 큰가? 
        if(installVersion < newVersion) {
        	// 설치유도 필요 
        	return resObj;
        }
		
        // 설치유도가 필요없는 경우에는 null 
		return null; 
	}
}
