package incheon.res.rdm.com.levy;


import incheon.com.cmm.context.RequestContext;
import incheon.com.security.vo.LoginVO;
import incheon.res.rdm.com.levy.stub.DefaultMessage;
import incheon.res.rdm.com.levy.stub.WebServiceIF;
import incheon.res.rdm.com.levy.stub.WebServiceIFServiceLocator;
import incheon.res.rdm.com.levy.vo.InputVO;
import incheon.res.rdm.com.levy.vo.LevyOutputVO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.egovframe.rte.fdl.property.EgovPropertyService;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.io.ByteArrayOutputStream;

@Component("LevyService")
public class LevyService {
	
    protected Log log = LogFactory.getLog(this.getClass());
	
    @Resource(name = "propertiesService")
    protected EgovPropertyService propertiesService;
    
    @Resource(name = "LevyUtil")
    protected LevyUtil levyUtil;
	
	private String bodyString;
	private String ifId;
	private String sysId;
	private String sourceCd;
	private String targetCd;
	private String msgKey;
	private String typeCd;
	private String resultCd;
	private String callUrl;

	

	/**
	 * 부과자료입력
	 */
	public LevyOutputVO inputLevy(InputVO inputVO, String lvsIp, String lvsPort) throws Exception
	{

		LoginVO loginVO = RequestContext.getCurrentUser();

	    ifId		= "ENIS-NTM-001-WO";
	    sysId		= "M024";
        sourceCd	= loginVO.getRoadMngInstCd();	// 시청
        targetCd	= loginVO.getRoadMngInstCd();  // 해당시군구
        sourceCd 	= sourceCd + sysId;
        targetCd 	= targetCd + sysId;
        typeCd		= "   ";	// 공백 3개
        resultCd	= "000";
		
		msgKey = levyUtil.getMsgKey(ifId);
		bodyString = levyUtil.buildXml(inputVO);
		
		log.error("xml:::::"+bodyString);
		
		callUrl = "http://"+lvsIp+":"+lvsPort+"/enis/service/server";
		log.error("inputLevy callUrl == " + callUrl);
		
		WebServiceIFServiceLocator locator = new WebServiceIFServiceLocator();
		locator.setServerAddress(callUrl);

		WebServiceIF service = (WebServiceIF)locator.getPort(WebServiceIF.class);

		ByteArrayOutputStream ostream = new ByteArrayOutputStream();
		ostream.write(levyUtil.toFixedLength(String.valueOf(bodyString.length()), 8));
		ostream.write(levyUtil.toFixedLength(ifId, 15));
		ostream.write(levyUtil.toFixedLength(sourceCd, 11));
		ostream.write(levyUtil.toFixedLength(targetCd, 11));
		ostream.write(levyUtil.toFixedLength(msgKey, 38));
		ostream.write(levyUtil.toFixedLength(typeCd, 3));
		ostream.write(levyUtil.toFixedLength(resultCd, 3));
		byte[] byteHeader = ostream.toByteArray();

		DefaultMessage reqMessage = new DefaultMessage();
		reqMessage.setHeader(byteHeader);
		reqMessage.setBody(bodyString.getBytes("utf-8"));

		DefaultMessage resMessage = service.requestService(reqMessage);
		
		LevyOutputVO outputVO = new LevyOutputVO();
		outputVO.setTag("enis_service_data");
		outputVO = levyUtil.getResultVO(resMessage,outputVO);

		return outputVO;
	}
}
