package com.xiuyukeji.plugin.translation;

import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.ui.Gray;
import com.intellij.ui.JBColor;
import com.intellij.ui.popup.PopupFactoryImpl;
import com.xiuyukeji.plugin.translation.translator.impl.GoogleTranslator;
import com.xiuyukeji.plugin.translation.translator.trans.Language;

/**
 * 请求
 *
 * @author Created by jz on 2017/10/24 14:45
 */
class RequestRunnable implements Runnable {
    private GoogleTranslator mGoogleTranslator;
    private Editor mEditor;
    private String mQuery;

    RequestRunnable(GoogleTranslator translator, Editor editor, String query) {
        this.mEditor = editor;
        this.mQuery = query;
        this.mGoogleTranslator = translator;
    }

    @Override
    public void run() {
        String text;
        if (isChinese(mQuery)) {
            text = mGoogleTranslator.translation(Language.ZH, Language.EN, mQuery);
        } else {
            text = mGoogleTranslator.translation(Language.EN, Language.ZH, mQuery);
        }
        if (text == null) {
            showPopupBalloon("翻译出错!");
        } else {
            showPopupBalloon("翻译:" + text);
        }
    }

    private boolean isChinese(String strName) {
        char[] cs = strName.toCharArray();
        for (char c : cs) {
            if (isChinese(c)) {
                return true;
            }
        }
        return false;
    }

    private boolean isChinese(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS;
    }

    private void showPopupBalloon(final String result) {
        ApplicationManager.getApplication().invokeLater(() -> {
            mEditor.putUserData(PopupFactoryImpl.ANCHOR_POPUP_POSITION, null);//解决因为TranslationPlugin而导致的泡泡显示错位问题
            JBPopupFactory factory = JBPopupFactory.getInstance();
            factory.createHtmlTextBalloonBuilder(result, null, new JBColor(Gray._242, Gray._0), null)
                    .createBalloon()
                    .show(factory.guessBestPopupLocation(mEditor), Balloon.Position.below);
        });
    }
}