package org.mazhuang.guanggoo.data.task;

import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.mazhuang.guanggoo.data.OnResponseListener;
import org.mazhuang.guanggoo.data.entity.ListResult;
import org.mazhuang.guanggoo.data.entity.Reply;
import org.mazhuang.guanggoo.data.entity.Topic;
import org.mazhuang.guanggoo.util.ConstantUtil;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author mazhuang
 * @date 2017/10/6
 */

public class GetReplyListTask extends BaseTask<ListResult<Reply>> {

    private String mUrl;

    public GetReplyListTask(String url, OnResponseListener<ListResult<Reply>> listener) {
        super(listener);
        mUrl = url;
    }

    @Override
    public void run() {
        List<Reply> replies = new ArrayList<>();

        boolean succeed = false;
        boolean hasMore = false;

        try {
            Document doc = get(mUrl);

            Elements elements = doc.select("div.reply-item");

            for (Element element : elements) {
                Reply reply = new Reply();

                Elements topicElements = element.select("span.title a");
                if (topicElements.isEmpty()) {
                    continue;
                }

                Topic topic = new Topic();
                topic.setTitle(topicElements.first().text());
                topic.setUrl(topicElements.first().absUrl("href"));

                reply.setTopic(topic);

                Elements contentElements = element.select("div.content");
                if (contentElements.isEmpty()) {
                    continue;
                }

                reply.setContent(contentElements.outerHtml());

                replies.add(reply);
            }

            succeed = true;

            Elements paginationElements = doc.select("ul.pagination");
            if (!paginationElements.isEmpty()) {
                Elements disabledElements = paginationElements.select("li.disabled");
                if (disabledElements.isEmpty()) {
                    hasMore = true;
                } else if (disabledElements.last() != null) {
                    Elements disableLinkElements = disabledElements.last().select("a");
                    if (!ConstantUtil.NEXT_PAGE.equals(disableLinkElements.text())) {
                        hasMore = true;
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (succeed) {
            ListResult<Reply> replyList = new ListResult<>();
            replyList.setData(replies);
            replyList.setHasMore(hasMore);
            successOnUI(replyList);
        } else {
            failedOnUI("获取回复列表失败");
        }
    }
}