package org.opencps.zalo.hook.servlet;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.osgi.service.component.annotations.Component;

import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.servlet.ServletResponseUtil;
import com.liferay.portal.kernel.util.ContentTypes;

import vn.mitc.ngsp.sdk.VNPost_N_GSP.IToken;
import vn.mitc.ngsp.sdk.models.MToken;

/**
compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
	compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib", version: "2.0.0"
	compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
	compileOnly group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"
	compileOnly group: "jstl", name: "jstl", version: "1.2"
	compileOnly group: "org.osgi", name: "osgi.cmpn", version: "6.0.0"
	
 * */

/**
 * @author thanhnv
 */
@Component(immediate = true, property = {
	"osgi.http.whiteboard.context.path=/",
	"osgi.http.whiteboard.servlet.pattern=/vnposttest/*"
}, service = Servlet.class)

public class VNPostNGSPServlet extends HttpServlet {

	@Override
	public void init()
		throws ServletException {

		if (_log.isInfoEnabled()) {
			_log.info("VNPostNGSPServlet init success");
		} else {
			System.out.println("VNPostNGSPServlet init success sys");
		}

		super.init();
	}

	@Override
	protected void doGet(
		HttpServletRequest request, HttpServletResponse response)
		throws IOException, ServletException {

		if (_log.isInfoEnabled()) {
			_log.info("VNPostNGSPServlet doGet");
		} else {
			System.out.println("VNPostNGSPServlet doGet sys");
		}

		try {
			Enumeration<String> enumeration = request.getParameterNames();
			Map<String, Object> modelMap = new HashMap<>();
			while (enumeration.hasMoreElements()) {
				String parameterName = enumeration.nextElement();
				modelMap.put(
					parameterName, request.getParameter(parameterName));
				_log.info(
					parameterName +
						"=" +
						request.getParameter(parameterName));
			}
			String tokenUrl = request.getParameter("tokenUrl");
			String consumer_key = request.getParameter("consumer_key");
			String secret_key = request.getParameter("secret_key");
			System.out.println(tokenUrl + consumer_key + secret_key);
			getToken(tokenUrl, consumer_key, secret_key);
		}
		catch (Exception e) {
			_log.error(e);
		}

		_writeSampleHTML(response);
	}

	@Override
	protected void doPost(
		HttpServletRequest request, HttpServletResponse response)
		throws IOException, ServletException {

		if (_log.isInfoEnabled()) {
			_log.info("VNPostNGSPServlet doPost");
		} else {
			System.out.println("VNPostNGSPServlet doPost sys");
		}

		try {
			doGet(request, response);
		}
		catch (Exception e) {
			_log.error(e);
		}

	}
	
	public static void getToken(String tokenUrl, String consumer_key, String secret_key) throws Exception {

		MToken token = IToken.getToken(tokenUrl, consumer_key, secret_key);

		System.out.println("Access token:" + token.getAccessToken());
		System.out.println("Token type:" + token.getTokenType());
		System.out.println("Expires in: " + token.getExpiresIn() + " ms");
	}

	/**
	 * Dummy contents
	 *
	 * @return dummy contents string
	 */
	private String _generateSampleHTML() {

		StringBuffer sb = new StringBuffer();

		sb.append("<html>");
		sb.append("<head><title>VNPOST TEST</title></head>");
		sb.append("<body>");
		sb.append("<h2>VNPostNGSPServlet</h2>");
		sb.append("</body>");
		sb.append("</html>");

		return new String(sb);
	}

	/**
	 * Write sample HTML
	 *
	 * @param resp
	 */
	private void _writeSampleHTML(HttpServletResponse resp) {

		resp.setCharacterEncoding(StringPool.UTF8);
		resp.setContentType(ContentTypes.TEXT_HTML_UTF8);
		resp.setStatus(HttpServletResponse.SC_OK);

		try {
			ServletResponseUtil.write(resp, _generateSampleHTML());
		}
		catch (Exception e) {
			_log.warn(e.getMessage(), e);

			resp.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED);
		}
	}

	private static final Log _log =
		LogFactoryUtil.getLog(VNPostNGSPServlet.class);

	private static final long serialVersionUID = 1L;

}