package com.yuji.tdb;

import java.io.IOException;

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;

	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
		resp.setContentType("text/plain");
		resp.getWriter().println(" traindelaybot Hello, world");

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

		if (requestToken == null
				|| CommonUtil.isNull(TrainDelayBotServlet.consumerKey)
				|| CommonUtil.isNull(TrainDelayBotServlet.consumerSecret)) {
			return;
		}

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

		// TODO null check
		TwitterUtil util = TwitterUtil.getInstance();
		util.main(TrainDelayBotServlet.consumerKey,
				TrainDelayBotServlet.consumerSecret, accessToken);
	}

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

			confBuilder.setDebugEnabled(true);
			confBuilder.setOAuthConsumerKey(consumerKey);
			confBuilder.setOAuthConsumerSecret(consumerSecret);
			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

			TrainDelayBotServlet.consumerKey = consumerKey;
			TrainDelayBotServlet.consumerSecret = consumerSecret;

			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();
		}
	}
}
