package at.aic18.g6t4.servicetwitter.service;

import at.aic18.g6t4.servicetwitter.model.Tweet;
import at.aic18.g6t4.servicetwitter.model.User;
import org.springframework.stereotype.Service;
import twitter4j.*;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class TwitterService {

    private final Twitter twitter;

    public TwitterService(Twitter twitter) {
        this.twitter = twitter;
    }

    public List<Tweet> searchTweets(String queryString) throws TwitterException {
        String excludeRetweets = " exclude:retweets";
        Query query = new Query(queryString + excludeRetweets);
        query.count(10);
        QueryResult queryResult = twitter.search(query);
        List<Status> statusList = queryResult.getTweets();
        return parseTweets(statusList);
    }

    private List<Tweet> parseTweets(List<Status> statusList) {
        return statusList.stream()
                .map(this::parseTweet)
                .collect(Collectors.toList());
    }

    private Tweet parseTweet(Status status) {
        return Tweet.builder()
                .id(status.getId())
                .createdAt(status.getCreatedAt())
                .text(status.getText())
                .user(parseUser(status.getUser()))
                .build();
    }

    private User parseUser(twitter4j.User twitterUser) {
        return User.builder()
                .id(twitterUser.getId())
                .name(twitterUser.getName())
                .build();
    }

}
