package com.yaoyumeng.v2ex.model;

import com.yaoyumeng.v2ex.utils.ContentUtils;

import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by yw on 2015/5/14.
 */
public class NotificationModel extends V2EXModel {

    private static final long serialVersionUID = 2015050106L;

    public TopicModel notificationTopic;
    public MemberModel notificationMember;
    public String notificationId;
    public String notificationDescriptionBefore;
    public String notificationDescriptionAfter;

    public void parse(JSONObject jsonObject) throws JSONException {
        jsonObject.get("notification");
    }

    public boolean parse(Element element) {
        Elements tds = element.getElementsByTag("td");
        if (tds.size() != 2) return false;

        notificationMember = new MemberModel();
        Element first = tds.get(0);
        String avatarUrl = first.getElementsByClass("avatar").attr("src");
        String avatarMember = first.getElementsByTag("a").attr("href");
        notificationMember.avatar = avatarUrl.startsWith("//")
                ? "http:" + avatarUrl
                : "http://www.v2ex.com" + avatarUrl;
        notificationMember.username = avatarMember.replace("/member/", "");

        notificationTopic = new TopicModel();
        Element second = tds.get(1);
        String rawContents = second.toString();

        Pattern pattern = Pattern.compile("deleteNotification\\((.*?),");
        Matcher matcher = pattern.matcher(rawContents);
        if (matcher.find()) {
            notificationId = matcher.group(1);
        }

        Elements aNodes = second.getElementsByTag("a");
        for (Element aNode : aNodes) {
            if (aNode.toString().contains("reply")) {
                notificationTopic.title = aNode.html();

                String topicURLString = aNode.attr("href");
                String[] ss = topicURLString.substring(3).split("#");

                try {
                    notificationTopic.id = Integer.parseInt(ss[0]);
                    notificationTopic.replies = Integer.parseInt(ss[1].substring(5));
                    break;
                } catch (Exception e) {
                    continue;
                }
            }
        }

        String dateString = second.getElementsByClass("snow").html();
        dateString = dateString.replace("ago", "");
        notificationTopic.url = dateString;

        Elements contentNodes = second.getElementsByClass("payload");
        notificationTopic.content = contentNodes.text();
        notificationTopic.contentRendered = ContentUtils.formatContent(contentNodes.html());

        if (rawContents.contains("里提到了你")) {
            notificationDescriptionBefore = " 在 ";
            notificationDescriptionAfter = " 里提到了你";
        }
        if (rawContents.contains("里回复了你")) {
            notificationDescriptionBefore = " 在 ";
            notificationDescriptionAfter = " 里回复了你";
        }
        if (rawContents.contains("时提到了你")) {
            notificationDescriptionBefore = " 在回复 ";
            notificationDescriptionAfter = " 时提到了你";
        }
        if (rawContents.contains("感谢了你发布的主题")) {
            notificationDescriptionBefore = " 感谢了你发布的主题 ";
            notificationDescriptionAfter = "";
        }
        if (rawContents.contains("感谢了你在主题")) {
            notificationDescriptionBefore = " 感谢了你在主题 ";
            notificationDescriptionAfter = " 里的回复";
        }
        if (rawContents.contains("收藏了你发布的主题")) {
            notificationDescriptionBefore = " 收藏了你发布的主题 ";
            notificationDescriptionAfter = "";
        }

        return true;
    }

}