package org.netways.api.twitter;

import java.util.List;

import twitter4j.DirectMessage;
import twitter4j.Paging;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.RateLimitStatus;
import twitter4j.SavedSearch;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;

public class TwitterFunctions {
	
	Twitter twitter;
	
	public int getHourlyLimit() throws TwitterException {
		RateLimitStatus rls = twitter.rateLimitStatus();
		return rls.getHourlyLimit();
	}
	
	public int getRemainingHits() throws TwitterException {
		RateLimitStatus rls = twitter.rateLimitStatus();
		return rls.getRemainingHits();
	}
	
	public User getUserInfo(String username) throws TwitterException {
		User user = twitter.getUserDetail(username);
		return user;
	}
	
	public List<User> getMyFollowers() throws TwitterException {
		List<User> followers = twitter.getFollowers();
		return followers;
	}

	public List<User> getFollowers(String username) throws TwitterException {
		List<User> followers = twitter.getFollowers(username);
		return followers;
	}
	
	public List<User> getFollowerPage(int side) throws TwitterException {
		Paging paging = new Paging(side);
		List<User> followers = twitter.getFollowers(paging);
		return followers;
	}
	
	public List<User> getFollowing() throws TwitterException {
		List<User> following = twitter.getFriends();
		return following;
	}

	public List<Status> getTimeline() throws TwitterException {
		List<Status> timeline = twitter.getUserTimeline("netways");
		return timeline;
	}
	
	public List<Status> getPublicTimeline() throws TwitterException {
		List<Status> timeline = twitter.getPublicTimeline();
		return timeline;
	}
	
	public List<Status> getFriendsTimeline(String username) throws TwitterException {
		List<Status> timeline = twitter.getUserTimeline(username);
		return timeline;
	}
	
	public void sendMessage(String user, String message) throws TwitterException {
		twitter.sendDirectMessage(user, message);
	}

	public List<DirectMessage> receiveMessages() throws TwitterException {
		List<DirectMessage> messages = twitter.getDirectMessages();
		return messages;
	}
	
	public List<Status> getMentions() throws TwitterException {
		List<Status> mentions = twitter.getMentions();
		return mentions;
	}
	
	public Status getStatus(long id) throws TwitterException {
		Status status = twitter.showStatus(id);
		return status;
	}
	
	public TwitterFunctions(String user, String password) {
		twitter = new Twitter(user, password);
	}
	
	public SavedSearch saveSearch(String query) throws TwitterException {
		SavedSearch search = twitter.createSavedSearch(query);
		return search;
	}

	public List<SavedSearch> getSavedSearches() throws TwitterException {
		List<SavedSearch> searches = twitter.getSavedSearches();
		return searches;
	}
	
	public SavedSearch getSavedSearch(int id) throws TwitterException {
		SavedSearch search = twitter.showSavedSearch(id);
		return search;
	}
	
	public QueryResult getTweets(String searchString) throws TwitterException {
		Query query = new Query(searchString);
		QueryResult qs = twitter.search(query);
		return qs;
	}
	
	public QueryResult getLocalTweets(String searchString, 
									   double latitude, 
									   double longtitude, 
									   double radius) throws TwitterException {
		Query query = new Query(searchString);
		query.setGeoCode(latitude, longtitude, radius, Query.KILOMETERS);
		QueryResult qs = twitter.search(query);
		return qs;
	}
}
