package com.eactive.eai.adapter.ftp;

import java.util.Properties;

import com.eactive.eai.common.util.Logger;

import com.eactive.eai.batch.doc.BatchDoc;
import com.eactive.eai.common.property.PropManager;
import com.eactive.eai.common.util.DatetimeUtil;

public class FtpSupport {
    private static final String PROP_GROUP_NAME_PREFIX = "TelegramInfo";
	
    /**
     * 기관 프라퍼티 이름을 얻는다.
     * @param batchDoc
     * @return
     */
	public static String getInstitutionPropertyName(BatchDoc batchDoc) {
        return PROP_GROUP_NAME_PREFIX + "{" +
                batchDoc.getBatchMsg().getHeader().getProcessCode() +
                "_" +
                batchDoc.getBatchMsg().getHeader().getInstitutionCode() + "}";
	}

	/**
	 * properties에서 propertyKey에 해당하는 정수 값을 얻는다. 
	 * 값이 없거나 오류가 발생하면 defaultValue를 얻는다.
	 * 
	 * @param properties 프라퍼티
	 * @param propertyKey 키
	 * @param defaultValue 기본값
	 * @param logger 로거
	 * @return 프러퍼티 값의 정수 또는 기본값
	 */
	public static int getIntProperty(Properties properties, String propertyKey, int defaultValue, Logger logger) {
		int returnValue = defaultValue;
		String propertyValue = properties.getProperty(propertyKey);
		
		if (propertyValue != null) {
			try {
				returnValue = Integer.parseInt(propertyValue);
			} catch(Exception e) {
				logger.error("{"+"propertyKey"+"} = {"+"propertyValue"+"}" +"["+ e.getMessage() +"]");
			}
		}
		return returnValue;
	}

	/**
	 * SFTP wild character *, ? 가 있는지 확인한다.
	 * @param filename 검사할 파일 이름
	 * @return *, ?가 있으면 true
	 */
	public static boolean hasWildcard(String filename) {
		return filename != null && (filename.contains("*") || filename.contains("?"));
	}

	/**
	 * 기관 Properties 를 얻는다.
	 * @param batchDoc 배치 정보
	 * @return 기관 Properties
	 */
	public static Properties getInstProperties(BatchDoc batchDoc) {
		PropManager pmanager = PropManager.getInstance();

		String propName = PROP_GROUP_NAME_PREFIX + "{" +
				batchDoc.getBatchMsg().getHeader().getProcessCode() +
				"_" +
				batchDoc.getBatchMsg().getHeader().getInstitutionCode() + "}";
		return pmanager.getProperties(propName);
	}	

	/**
	 * 파일 Properties 를 얻는다.
	 * @param batchDoc 배치 정보
	 * @return 파일 Properties
	 */
	public static Properties getFileProperties(BatchDoc batchDoc) {
		PropManager pmanager = PropManager.getInstance();

		String propName = PROP_GROUP_NAME_PREFIX + "{" +
				batchDoc.getBatchMsg().getHeader().getProcessCode() +
				"_" +
				batchDoc.getBatchMsg().getHeader().getBizCode() + "}";
		return pmanager.getProperties(propName);
	}
	
	/**
	 * 자동, 수동 스케줄을 판단하고, 수동인 경우 baseDate를 바꾼다.
	 * 
	 * @param batchDoc
	 * @return
	 */
	public static boolean isManaulRecive(BatchDoc batchDoc) {
		boolean isManualReceive = false;

		String reqFileName = batchDoc.getBatchMsg().getHeader().getFileName();
		String baseDate = DatetimeUtil.getCurrentDate();

		if (reqFileName != null && reqFileName.length() > 8) {
			if (DatetimeUtil.isRightDate(reqFileName.substring(reqFileName.length() - 8))) {
				baseDate = reqFileName.substring(reqFileName.length() - 8);
				isManualReceive = true;
			}
		}
		batchDoc.getBatchMsg().getHeader().setBaseDate(baseDate);
		return isManualReceive;
	}
}
