package com.dbs.mplus.fatima.framework;

/**
 * 기본 상수들 
 * 
 * @author aple
 *
 */
public class MPlusFrameworkConstants {
	/* --------------------------------------------------------------------
	 * 환경설정 
	 --------------------------------------------------------------------*/
	
    /**
     * 개발단계 소스인지 여부
     */
    public static final boolean DEBUG_MODE = false;
    /**
     * 로그 남길때 사용할 태그
     */
    public static final String LOG_TAG = "MPLUS";
    
     /**
     * 인증서 유형 
     */
    public static final String CERT_TYPE = "AppStore";

    /**
     * GoogleCloudMessaging, senderID (project number) 
     */
    public static String GCM_SENDER_ID = ""; // API Key :

    /**
     * connect timeout 
     */
    public static final int HTTP_CONNECT_TIMEOUT = 5000;
    /**
     * read timeout 
     */
    public static final int HTTP_READ_TIMEOUT = 3000;

    /**
     * 서버와 자바스크립트 통신을 위한 구분자
     * iOS, Android 공통된 이름을 사용하도록 바꾸고 싶지만 일부 외부 라이브러리의 경우 이 값이 고정되어 있다.
     */
    public static final String WEB_JAVASCRIPT_INF_NAME = "Android";
    /**
     * android ID에 중복 발행 버그 회피용 
     */
    public static final String DUPLICATE_UUID = "9774d56d682e549c"; 	
    /**
     * user agent에 붙일 uuid 
     */
    public static final String USER_AGENT_UUID_STR = " uuid:";
    /**
     * device token기본값
     */
    public static final String NOT_ALLOWED_DEVICE_TOKEN_BY_USER  =  "NOT_ALLOWED_DEVICE_TOKEN_BY_USER";



	/* --------------------------------------------------------------------
	 * Activity 연동
	 --------------------------------------------------------------------*/


    /**
     * Activity간 REQUEST_CODE
     * onActivityResult에서 requestCode로 받을 값
     * @author aple
     *
     */
    public enum ACTIVITY_REQUEST_CODE {
    	// google play 서비스 보완
    	GOOGLE_API_AVAILABILITY_USER_RESOLVABLE_ERROR_DIALOG("googleApi", 200),

        // 팝업 호출 완료
        AFTER_EXTRA_POPUP("extraPopup", 500);

    	//
    	private final String codeName;
    	private final int codeValue;
    	/**
    	 * 생성자
    	 * @param n
    	 * @param v
    	 */
    	private ACTIVITY_REQUEST_CODE(String n, int v) {
    		this.codeName = n;
    		this.codeValue = v;
    	}
    	/**
    	 * 코드값으로 코드 찾기
    	 * @param codeValue
    	 * @return
    	 */
    	public static ACTIVITY_REQUEST_CODE search(int codeValue) {
    		final ACTIVITY_REQUEST_CODE[] codes = ACTIVITY_REQUEST_CODE.values();

    		for(final ACTIVITY_REQUEST_CODE c: codes) {
    			if(c.codeValue == codeValue) {
    				return c;
    			}
    		}

    		return null;
    	}

    }



	/* --------------------------------------------------------------------
	 * 번들에 들어갈 값들 
	 --------------------------------------------------------------------*/	    
    
    /**
     * intent의 extra에 action을 넣기 위한 키 
     */
    public static final String ACTION_KEY = "MCARE_ACTION_KEY"; 
    /**
     * WebView를 통한 브라우징
     */
    public static final String ACTION_BROWSING = "MCARE_ACTION_BROWSING";
    /**
     * 사용자 인증용 Popup을 이용한 브라우징
     */
    public static final String ACTION_AUTH_POPUP_BROWSING = "MCARE_ACTION_AUTH_POPUP_BROWSING";
    /**
     * 외부 컨텐츠 로딩을 위한 팝업 브라우징
     */
    public static final String ACTION_EXTRA_POPUP_BROWSING = "MCARE_ACTION_EXTRA_POPUP_BROWSING";
    
	/**
	 * 외부 trigger에 의해 앱을 시작시킬때 어디서 시작할지 
	 * index인지 도우미인지... 어디인지... 
	 */
	public static final String PARAM_START_URL = "MCARE_PARAM_START_URL"; 
	
    /**
     * Push 메시지 수신 
     */
    public static final String ACTION_PUSH = "MCARE_ACTION_PUSH"; 	
    
    
    /**
     * push - message id 
     */
    public static final String KEY_NOTI_PUSH_ID = "ID"; 
    /**
     * push - pid 
     */
    public static final String KEY_NOTI_PUSH_PID = "pid";
    /**
     * push - title 
     */
    public static final String KEY_NOTI_PUSH_TITLE = "title"; 
    /**
     * push - 등록시간 
     */
    public static final String KEY_NOTI_PUSH_REGDT = "regDt"; 	  
    
    
    
	/**
	 * Notify 창을 이용해서 메시지 보여줄 때 
	 */
	public static final String ACTION_ALERT = "MCARE_ACTION_ALERT";
	/**
	 * Notify 창에 표시할 메시지 
	 */
	public static final String PARAM_ALERT_TEXT = "PARAM_ALERT_TEXT";     
	
	
	/**
	 * Notify 창에서 버전업 메시지 보여줄 때 
	 */
	public static final String ACTION_VERSION_UP = "MCARE_ACTION_VERSION_UP";
	/**
	 * 버전업을 처리하기 위한 마켓 주소 
	 */
	public static final String PARAM_VERSION_UP_MARKET_URL = "PARAM_VERSION_UP_MARKET_URL"; 
	
	/**
	 * Notify 창에서 메시지를 보여주고 앱을 죽여야 하는 경우 
	 */
	public static final String ACTION_APP_KILL = "MCARE_ACTION_APP_KILL";
	/**
	 * 앱을 죽이기 전에 보여줄 메시지 
	 */
	public static final String PARAM_APP_KILL_TEXT = "PARAM_APP_KILL_TEXT";

	/* --------------------------------------------------------------------
	 * 메시지 규격 관련 
	 --------------------------------------------------------------------*/	
	
    /**
     * 메시지 규격 : type
     */
    public static final String MSG_TYPE_STR = "type";
    /**
     * type에 들어갈 수 있는 값
     */
    public enum MSG_TYPE {
        ERROR("error"),
        COMMAND("command");

        private final String type;
        MSG_TYPE(String type) {
            this.type = type;
        }

        /**
         * 문자열로 enum 찾기
         * @param name
         * @return
         */
        public static MSG_TYPE getEnum(String name) {
            final MSG_TYPE[] m = values();

            for (final MSG_TYPE element : m) {
                if(element.toString().equals(name)) {
                    return element;
                }
            }

            return null;
        }

        /**
         * enum에 할당된 문자열 얻기
         * @return enum에 할당된 문자열
         */
        @Override
		public String toString() {
            return this.type;
        }
    }

    /**
     * 메시지 규격 : functionType 
     */
    public static final String MSG_FUNCTION_TYPE_STR = "functionType";

    /**
     * function에 들어갈 수 있는 값
     */
    public enum MSG_FUNCTION_TYPE {
        BROWSING("browsing"), // 웹 페이지 이동 
        SYSTEM_BROWSING("systemBrowsing"), // 시스템에 설치된 웹 브라우저로 로딩 
        POPUP("popup"), // 팝업으로 페이지 이동 
        TOKEN("token"), // 토큰요청
        SCREEN("screen"), // 현재는 화면 회전
        POPUP_BROWSING("popUpBrowsing"), // 팝업 웹 브라우징
        VERSION("version"), // 버전확인 (프로그램정보)
        CONSENT("consent"), // 동의서
        CONSENT_SIGN("consentSign"),    // 동의서 전자서명
        LOGOUT("logout"),   // 로그아웃
        EXIT("exit"); // 앱종료

        private final String functionType;
        MSG_FUNCTION_TYPE(String function) {
            this.functionType = function;
        }

        /**
         * 문자열에 해당되는 enum찾기
         * @param name enum의 이름
         * @return 이름에 해당되는 enum
         */
        public static MSG_FUNCTION_TYPE getEnum(String name) {
            final MSG_FUNCTION_TYPE f[] = values();

            for (final MSG_FUNCTION_TYPE element : f) {
                if(element.toString().equals(name)) {
                    return element;
                }
            }

            return null;
        }

        /**
         * enum에 할당된 문자열 반환
         * @return enum의 문자열
         */
        @Override
		public String toString() {
            return this.functionType;
        }
    }

    /**
     * 메시지 규격 : value
     */
    public static final String MSG_VALUE_STR = "value";
    /**
     * value에 들어갈 수 있는 값의 key
     */
    public enum MSG_VALUE_KEY {
        ERROR_MSG("errorMsg"), 	// MSG_TYPE = ERROR
        BROWSING_URL("url"), 	// FUNCTION_TYPE = BROWSING, CERTIBYPHONE
        CALLBACK_FN("callbackFn"), // 실행 후 호출할 자바스크립트 함수명 
        ORIENTATION("orientation"); // 화면방향전환관련
    	
        private final String value;
        MSG_VALUE_KEY (String value) {
            this.value = value;
        }

        /**
         * 문자열에 해당되는 enum 찾기
         * @param name
         * @return
         */
        public static MSG_VALUE_KEY getEnum(String name) {
            final MSG_VALUE_KEY[] m = values();

            for (final MSG_VALUE_KEY element : m) {
                if(element.toString().equals(name)) {
                    return element;
                }
            }

            return null;
        }

        /**
         * enum에 할당된 문자열 반환
         * @return
         */
        @Override
		public String toString() {
            return this.value;
        }
    }

    /**
     * 메시지 규격 : param
     */
    public static final String CONSENT_USERID_STR = "userId";
    public static final String CONSENT_COMMON_PARAM_STR = "globalParam";
    public static final String CONSENT_PARAM_STR = "consentParam";

    public static final String CONSENT_SIGN_PARAM_STR = "consentSignParam";

    /**
     * function : screen인 경우, 화면방향을 지정하는 값. 이건 세로모드 
     */
    public static final String MSG_SCREEN_ORIENTATION_PORTRAIT = "portrait";
    
	/**
	 * 성공/실패 여부 
	 */
	public static final String KEY_SUCCESS = "success";
	/**
	 * 실행결과 
	 */
	public static final String KEY_RESULT = "result";
}
