package com.mmjang.ankihelper.data.dict;

import android.content.Context;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.Toast;

import com.mmjang.ankihelper.MyApplication;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

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

/**
 * Created by liao on 2017/4/28.
 */

public class JiSho implements IDictionary {

    private static final String AUDIO_TAG = "MP3";
    private static final String DICT_NAME = "Japenese (jisho.org)";
    private static final String DICT_INTRO = "数据来自 jisho.org. audio项是形如 [sound:xxx.mp3] 的发音,使用之前默认模版的用户需要编辑模版并在里面加入{{audio}}";
    private static final String[] EXP_ELE = new String[] {"word", "reading", "audio", "definition"};

    private static final String wordUrl = "http://jisho.org/search/";
    private static final String autoCompleteUrl = "https://www.esdict.cn/dicts/prefix/";

    public JiSho(Context context) {

    }

    public String getDictionaryName() {
        return DICT_NAME;
    }

    public String getIntroduction() {
        return DICT_INTRO;
    }

    public String[] getExportElementsList() {
        return EXP_ELE;
    }

    public List<Definition> wordLookup(String key) {
        try {
            Document doc = Jsoup.connect(wordUrl + key)
                    .userAgent("Mozilla")
                    .timeout(5000)
                    .get();
            Elements entrys = doc.select("div.concept_light");
            ArrayList<Definition> defList = new ArrayList<>();
            if (entrys.size() > 0) {
                for (Element ele : entrys){
                    String furigana = "";
                    String writing = "";
                    String mp3_url = "";
                    //String meaning_tag = "";
                    //String definition = "";
                    Elements furigana_soup = ele.select("span.furigana");
                    if(furigana_soup.size() > 0){
                        furigana = furigana_soup.get(0).text().trim();
                    }

                    Elements writing_soup = ele.select("span.text");
                    if(writing_soup.size() > 0){
                        writing = writing_soup.get(0).text().trim();
                    }

                    Elements audio_soup = ele.select("audio > source");
                    if(audio_soup.size() > 0){
                        mp3_url = "[sound:" +audio_soup.get(0).attr("src") + "]";
                    }

                    Elements meaning_tags_soup = ele.select("div.meaning-tags");
                    for(Element tag : meaning_tags_soup){
                        String meaning_tag = tag.text().trim();
                        Element word_def_soup = tag.nextElementSibling();
                        if(word_def_soup != null){
                            for(Element defSoup : word_def_soup.select("div.meaning-definition > span.meaning-meaning")){
                                HashMap<String, String> defMap = new HashMap<>();
                                String definition = "<i><font color='grey'>" + meaning_tag + "</font></i> " + defSoup.text().trim();
                                defMap.put(EXP_ELE[0], writing);
                                defMap.put(EXP_ELE[1], furigana);
                                defMap.put(EXP_ELE[2], mp3_url);
                                //defMap.put(EXP_ELE[3], meaning_tag);
                                defMap.put(EXP_ELE[3], definition);
                                String audioIndicator = "";
                                if(!mp3_url.isEmpty()){
                                    audioIndicator = "<font color='#227D51' >"+AUDIO_TAG + "</font>";
                                }
                                String export_html = "<b>" + writing + "</b> <font color='grey'>" + furigana + "</font> " + audioIndicator + "<br/>" + definition;
                                defList.add(new Definition(defMap, export_html));
                            }
                        }
                    }
                }
            }

            return defList;
        } catch (IOException ioe) {
            //Log.d("time out", Log.getStackTraceString(ioe));
            Toast.makeText(MyApplication.getContext(), Log.getStackTraceString(ioe), Toast.LENGTH_SHORT).show();
            return new ArrayList<Definition>();
        }

    }

    public ListAdapter getAutoCompleteAdapter(Context context, int layout) {
        return null;
    }


}