package com.yuji.tdb;

import java.io.IOException;
import java.util.logging.Logger;

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

import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.OAuthAuthorization;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;

import com.yuji.tdb.common.CommonUtil;
import com.yuji.tdb.twitter.TwitterUtil;

@SuppressWarnings("serial")
public class TrainDelayBotServlet extends HttpServlet {
	private static RequestToken requestToken = null;
	private static AccessToken accessToken = null;
	private static String consumerKey = null;
	private static String consumerSecret = null;

	private static final Logger log = Logger
			.getLogger(TrainDelayBotServlet.class.getName());

	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
		try {
			log.info("start");
			
			resp.setContentType("text/plain");
			resp.getWriter().println("<h3>traindelaybot Hello, world</h3>");

			String parmConsumerKey = req.getParameter("key");
			String parmConsumerSecret = req.getParameter("secret");
			String parmResult = req.getParameter("result");
			if (!CommonUtil.isNull(parmConsumerKey)
					&& !CommonUtil.isNull(parmConsumerSecret)) {
				setOAuthAuthorization(req, resp, parmConsumerKey,
						parmConsumerSecret);
				return;
			}

			if (requestToken == null || CommonUtil.isNull(consumerKey)
					|| CommonUtil.isNull(consumerSecret)) {
				log.warning("001");
				return;
			}

			if (!CommonUtil.isNull(parmResult)) {
				resultOAuthAuthorization();
				return;
			}

			if (accessToken == null) {
				log.warning("002");
				return;
			}

			TwitterUtil util = TwitterUtil.getInstance();
			util.main(consumerKey, consumerSecret, accessToken);
		} finally {
			log.info("end");
		}

	}

	private void setOAuthAuthorization(HttpServletRequest req,
			HttpServletResponse resp, String parmConsumerKey,
			String parmConsumerSecret) {
		try {
			ConfigurationBuilder confBuilder = new ConfigurationBuilder();

			confBuilder.setDebugEnabled(true);
			confBuilder.setOAuthConsumerKey(parmConsumerKey);
			confBuilder.setOAuthConsumerSecret(parmConsumerSecret);
			Configuration conf = confBuilder.build();

			String url = req.getRequestURL().toString();

			OAuthAuthorization oauth = new OAuthAuthorization(conf);
			// Twitter̔F؉ʂ̖߂w肵܂B
			// AccessTokenRg[w肵܂B
			String callbackURL = url + "?result=yes";
			// RequestToken requestToken =
			// oauth.getOAuthRequestToken(callbackURL);
			requestToken = oauth.getOAuthRequestToken(callbackURL);
			// RequestTokenZbVɕۑĂ܂B
			// sessionScope("RequestToken", requestToken);
			// Twitter̔F؉ʂփ_CNg܂B

			consumerKey = parmConsumerKey;
			consumerSecret = parmConsumerSecret;

			resp.sendRedirect(requestToken.getAuthenticationURL());
		} catch (TwitterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void resultOAuthAuthorization() {
		try {
			// Twitter twitter = new TwitterFactory().getInstance();
			// String tokenKey = requestToken.getToken();
			// String tokenSecret = requestToken.getTokenSecret();

			ConfigurationBuilder confBuilder = new ConfigurationBuilder();
			confBuilder.setDebugEnabled(true).setOAuthConsumerKey(consumerKey)
					.setOAuthConsumerSecret(consumerSecret);
			TwitterFactory factory = new TwitterFactory(confBuilder.build());
			Twitter twitter = factory.getInstance();

			accessToken = twitter.getOAuthAccessToken(requestToken);
		} catch (TwitterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
