<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="org.apache.http.HttpResponse"%>
<%@page import="org.apache.http.client.methods.HttpPost"%>
<%@page import="org.apache.http.impl.client.HttpClients"%>
<%@page import="org.apache.http.client.HttpClient"%>
<%@page import="org.apache.http.HttpEntity"%>
<%@page import="java.net.URLEncoder"%>
<%@page import="org.apache.http.entity.ContentType"%>
<%@page import="org.apache.http.entity.mime.content.FileBody"%>
<%@page import="java.io.File"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.nio.charset.Charset"%>
<%@page import="org.apache.http.entity.mime.HttpMultipartMode"%>
<%@page import="org.apache.http.entity.mime.MultipartEntityBuilder"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=utf-8	" pageEncoding="utf-8"%>
<%
	try{
		//기본 설정값
		//final String encodingType = "utf-8";
		final String encodingType 	=	"UTF-8";
		final String boundary 		= 	"____boundary____";
		
		final String mberId			=	"goodgkdus";
		final String accessKey		=	"0367a25ec370d1141898a0b9767103";
	
		/**************** 문자전송하기 예제 ******************/
		/* "result_code":결과코드,"message":결과문구, */
		/* "msg_id":메세지ID,"error_cnt":에러갯수,"success_cnt":성공갯수 */
		/* 동일내용 > 전송용 입니다.  
		/******************** 인증정보 ********************/
		//String sms_url = "https://apis.aligo.in/send/"; // 전송요청 URL
		//String sms_url = "https://api.munjaon.co.kr:9998/api/accessTest/Test"; // 전송요청 URL
		//String sms_url = "https://api.munjaon.co.kr:9998/api/accessKey/SendMsg"; // 전송요청 URL
		String sms_url = "http://localhost:8088/api/accessKey/SendMsg"; // 전송요청 URL
		
		Map<String, String> sms = new HashMap<String, String>();		
		sms.put("mberId", 		mberId); // SMS 아이디		
		sms.put("accessKey", 	accessKey); //인증키		
		/******************** 인증정보 ********************/
		

		//임시	-	테스트용 시작
		//String p_mberId 	= request.getParameter("p_mberId");	//발신번호
		//String p_accessKey	= request.getParameter("p_accessKey");	//수신번호
		//sms.put("mberId", 		p_mberId); // SMS 아이디		
		//sms.put("accessKey", 	p_accessKey); //인증키
		//임시	-	테스트용 끝
		/******************** 전송정보 ********************/
		//전달 받은 값
		//필수값
		String p_callFrom 	= request.getParameter("p_callFrom");	//발신번호
		String p_callToList	= request.getParameter("p_callToList");	//수신번호
		//String p_eachPrice	= request.getParameter("p_eachPrice");	//전송문자 개별가격
		//String p_fileCnt	= request.getParameter("p_fileCnt");	//첨부파일갯수
		//String p_sPrice	= request.getParameter("p_sPrice");		//단문문자단가
		//String p_totPrice	= request.getParameter("p_totPrice");	//총결제금액		
		//String p_txtReplYn	= request.getParameter("p_txtReplYn");	//치환문자 여부	Y//N
		String p_txtReplYn	= "N";	//치환문자 여부	-	초기 지원안함		
		String p_msgType	= request.getParameter("p_msgType");	//문자타입 4-단문,5-URL,6-MMS,7-BARCODE,8-카카오알림톡		
		//String p_msgKind	= request.getParameter("p_msgKind");	//N-일반,A-광고,C-선거
		String p_msgKind	= "N";	//N-일반,A-광고,C-선거	-	초기 지원안함
		String p_smsTxt		= request.getParameter("p_smsTxt");		//SMS용 메시지본문
				
		//선택값
		//String p_mmsPrice		= request.getParameter("p_mmsPrice");	//mms단가
		//String p_mPrice		= request.getParameter("p_mPrice");		//장문문자단가
		//String p_spamStatus	= request.getParameter("p_spamStatus");	//스팸문자 유무
		
		//예약문자의 경우(선택값)
		String p_reserveYn	= request.getParameter("p_reserveYn");		//예약문자 여부 N or Y
		String p_divideCnt	= request.getParameter("p_divideCnt");		//분할문자 건수
		String p_divideTime	= request.getParameter("p_divideTime");		//분할문자 간격
		String p_reqDate	= request.getParameter("p_reqDate");		//예약시간
		
		//치환문자일경우(선택값)	-	치환문자일 경우 txtReplYn=’Y’일때 필수	-	초기 지원안함
		//String p_nameList	= request.getParameter("p_nameList");		//치환 이름 리스트	String[]
		//String p_rep1List	= request.getParameter("p_rep1List");		//치환 문자1 리스트	String[]
		//String p_rep2List	= request.getParameter("p_rep2List");		//치환 문자2 리스트	String[]
		//String p_rep3List	= request.getParameter("p_rep3List");		//치환 문자3 리스트	String[]
		//String p_rep4List	= request.getParameter("p_rep4List");		//치환 문자4 리스트	String[]
		//String p_shortMsgCnt= request.getParameter("p_shortMsgCnt");	//단문 건수
		//String p_longMsgCnt	= request.getParameter("p_longMsgCnt");		//장문 건수
		//String p_imgMsgCnt	= request.getParameter("p_imgMsgCnt");		//이미지 건수
		
		//이미지일경우(선택값)	-	초기 지원안함
		//String p_imgFilePath= request.getParameter("p_imgFilePath");		//그림 이미지 경로		String[]
		//String p_imgFileId	= request.getParameter("p_imgFileId");		//이미지 atchId 배열	String[]
		//String p_templateYn	= request.getParameter("p_templateYn");		//이미지 에디터 사용여부	String[]
		
		/*
		sms.put("msg", "%고객명%님. 안녕하세요. API TEST SEND"); // 메세지 내용
		sms.put("receiver", "01111111111,01111111112"); // 수신번호
		sms.put("destination", "01111111111|담당자,01111111112|홍길동"); // 수신인 %고객명% 치환
		sms.put("sender", ""); // 발신번호
		sms.put("rdate", ""); // 예약일자 - 20161004 : 2016-10-04일기준
		sms.put("rtime", ""); // 예약시간 - 1930 : 오후 7시30분
		sms.put("testmode_yn", "Y"); // Y 인경우 실제문자 전송X , 자동취소(환불) 처리
		sms.put("title", "제목입력"); //  LMS, MMS 제목 (미입력시 본문중 44Byte 또는 엔터 구분자 첫라인)
		*/
		
		
		//전송내역조회
		//(필수)
		String p_msgGroupId	= request.getParameter("p_msgGroupId");		//메시지 group id
		
		//(선택)
		String p_page		= request.getParameter("p_page");			//페이지번호 기본-1
		String p_pageSize	= request.getParameter("p_pageSize");		//페이지당 출력갯수-30(30~500)
		String p_startDate	= request.getParameter("p_startDate");		//조회시작일자-기본값 오늘
		String p_endDate	= request.getParameter("p_endDate");		//조회마감일자-기본값 내일
		
		
		//REST API 주소 받기
		String p_api_type	= request.getParameter("p_api_type").toUpperCase();	//api 호출 타입		msg,mass,hstry, hstryDetail,, myData
		
		
		System.out.println("p_api_type");
		System.out.println(p_api_type);
		
		boolean b_is_send	=	true;	//발송 처리 여부
		
		
		switch (p_api_type) {		
        case "MSG":
            //System.out.println("일반메세지발송");
            sms_url = "http://192.168.0.59:8088/api/accessKey/SendMsg"; // 전송요청 URL
            sms_url = "http://192.168.0.59:8088/api/send/sendMsg"; // 전송요청 URL
            sms_url = "http://localhost:8088/api/send/sendMsg"; // 전송요청 URL
            

            //추가 전송 데이터
    		sms.put("callFrom", p_callFrom); 		// 발신번호
    		sms.put("callToList", p_callToList);	// 수신번호
    		sms.put("msgType", p_msgType);			// 문자타입 4-단문,5-URL,6-MMS,7-BARCODE,8-카카오알림톡
    		sms.put("smsTxt", p_smsTxt);			//SMS용 메시지본문
    		
    		sms.put("reserveYn", p_reserveYn);		//예약문자 여부 N or Y
    		sms.put("divideCnt", p_divideCnt);		//분할문자 건수
    		sms.put("divideTime", p_divideTime);	//분할문자 간격
    		sms.put("reqDate", p_reqDate);			//예약시간
    		//System.out.println("일반메세지발송");
            break;
            
        case "MASS": 
            System.out.println("대량메세지발송");
            sms_url = "http://localhost:8088/api/accessKey/mass"; // 전송요청 URL
            sms_url = "http://localhost:8088/api/send/sendMsgs"; // 전송요청 URL
            
            //추가 전송 데이터
    		sms.put("callFrom", p_callFrom); 		// 발신번호
    		sms.put("callToList", p_callToList);	// 수신번호
    		sms.put("msgType", p_msgType);			// 문자타입 4-단문,5-URL,6-MMS,7-BARCODE,8-카카오알림톡
    		sms.put("smsTxt", p_smsTxt);			//SMS용 메시지본문
    		
    		sms.put("reserveYn", p_reserveYn);		//예약문자 여부 N or Y
    		sms.put("divideCnt", p_divideCnt);		//분할문자 건수
    		sms.put("divideTime", p_divideTime);	//분할문자 간격
    		sms.put("reqDate", p_reqDate);			//예약시간    		
            break;
            
        case "HSTRY":
            System.out.println("전체발송이력");
            sms_url = "http://localhost:8088/api/inqry/hstry"; // 전송요청 URL
            
            //추가 전송 데이터
            sms.put("page"		, p_page);			//페이지번호
            sms.put("pageSize"	, p_pageSize);		//페이지당 출력갯수
            sms.put("startDate"	, p_startDate);		//시작일자
            sms.put("endDate"	, p_endDate);		//마감일자            
            break;

        case "HSTRYDETAIL":
            System.out.println("상세발송이력");
            sms_url = "http://localhost:8088/api/accessKey/hstryDetail"; // 전송요청 URL
            sms_url = "http://localhost:8088/api/inqry/hstryDetail"; // 전송요청 URL
            
            //추가 전송 데이터
            sms.put("msgGroupId"		, p_msgGroupId);		//문자 전송 정보
            
            sms.put("page"		, p_page);			//페이지번호
            sms.put("pageSize"	, p_pageSize);		//페이지당 출력갯수            
            break;
            
        case "MYDATA":
            System.out.println("잔액|단가|발송가능건수");
            sms_url = "http://localhost:8088/api/accessKey/myData"; // 전송요청 URL
            sms_url = "http://localhost:8088/api/inqry/price"; // 전송요청 URL
            break;
            
        default:
        	b_is_send	=	false;
        	break;
    	}
		
		System.out.println(b_is_send);
		
		//REST API 요청
		if (b_is_send){
			System.out.println("일반메세지발송");
			System.out.println(p_msgType);
			System.out.println("일반메세지발송");
			
			String image = "";
			//image = "/tmp/pic_57f358af08cf7_sms_.jpg"; // MMS 이미지 파일 위치
			
			/******************** 전송정보 ********************/
			String result = "";
			
			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
			
			builder.setBoundary(boundary);
			builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
			builder.setCharset(Charset.forName(encodingType));
			
			for(Iterator<String> i = sms.keySet().iterator(); i.hasNext();){
				String key = i.next();
				//전달값이 없는 경우 오류
				try{
					System.out.println(key);
					System.out.println(key);
					System.out.println(sms.get(key));
					builder.addTextBody(key, sms.get(key)
							, ContentType.create("Multipart/related", encodingType));					
				}catch(Exception ex){
					//ex.printStackTrace()
					
				}				

			}			
			
			File imageFile = new File(image);
			if(image!=null && image.length()>0 && imageFile.exists()){
		
				builder.addPart("image",
						new FileBody(imageFile, ContentType.create("application/octet-stream"),
								URLEncoder.encode(imageFile.getName(), encodingType)));
			}
			
			HttpEntity entity = builder.build();
			
			HttpClient client = HttpClients.createDefault();
			HttpPost post = new HttpPost(sms_url);
			post.setEntity(entity);
			
			HttpResponse res = client.execute(post);
			
			
			if(res != null){
				BufferedReader in = new BufferedReader(new InputStreamReader(res.getEntity().getContent(), encodingType));
				String buffer = null;
				while((buffer = in.readLine())!=null){
					result += buffer;
				}
				in.close();
			}			
			out.print(result);
			
		}else{			
			out.print("{\"resultCode\":99,\"message\":\"WRONG API METHOD\"}");
			
		}
		
	}catch(Exception e){
		out.print(e.getMessage());
	}
	
%>