package com.gracecode.android.gojuon.common;

import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Typeface;
import com.gracecode.android.common.CustomApplication;
import com.gracecode.android.gojuon.helper.StageHelper;
import com.gracecode.android.gojuon.service.PronounceService;

import java.util.Locale;

public class Gojuon extends CustomApplication {
    public static final String KEY_ABOUT = "key_about";
    public static final String KEY_FEEDBACK = "key_feedback";
    public static final String KEY_DONATE = "key_donate";
    public static final String KEY_AUTO_RESUME = "key_auto_resume";
    public static final String KEY_KEEP_SCREEN = "key_screen_on";
    public static final String KEY_KATAKANA_FIRST = "key_katakana_first";
    public static final String KEY_HIGHLIGHT_SELECTED = "key_highlight_selected";
    public static final String KEY_AUTO_ROTATE = "key_auto_rotate";
    public static final String KEY_LANGUAGE = "key_language";
    public static final String KEY_SHOW_SHADOW = "key_show_shadow";
    public static final String KEY_CLEAR_RECORD = "key_clear_record";
    public static final String KEY_USE_HANDWRITING_FONT = "key_use_handwriting";

    public static final String KEY_SHOW_CHARACTER_TYPE = "key_show_character_type";
//    public static final String CUSTOM_FONT_NAME = "Roboto-Thin.ttf";

    public static final String LANGUAGE_AUTO = "-1";
    public static final String LANGUAGE_CHINESE = "1";
    public static final String LANGUAGE_ENGLISH = "0";

    public static final String DEFAULT_RESUME_INDEX = "-1";

    private static Gojuon mInstance;
    private Intent mServiceIntent;
    private static Typeface mCustomTypeface;

    public static Gojuon getInstance() {
        return mInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = Gojuon.this;
        mServiceIntent = new Intent(this, PronounceService.class);
        startService(mServiceIntent);
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        if (mServiceIntent != null) {
            stopService(mServiceIntent);
        }
    }

    public void setLanguage() {
        String language = getSharedPreferences().getString(KEY_LANGUAGE, LANGUAGE_AUTO);

        Configuration configuration = getResources().getConfiguration();
        switch (language) {
            case LANGUAGE_AUTO:
                configuration.locale = Locale.getDefault();
                break;

            case LANGUAGE_ENGLISH:
                configuration.locale = Locale.ENGLISH;
                break;

            case LANGUAGE_CHINESE:
                configuration.locale = Locale.CHINA;
                break;
        }

        getBaseContext().getResources().updateConfiguration(configuration, null);
    }

    /**
     * 发音,方便调用使用广播的方式
     *
     * @param context
     * @param charset
     */
    public static void pronounce(Context context, String charset) {
        try {
            Intent intent = new Intent(PronounceService.PLAY_PRONOUNCE_NAME);
            intent.putExtra(PronounceService.EXTRA_CHARSET, charset);
            context.sendBroadcast(intent);
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
    }

    public StageHelper getStageHelper() {
        return StageHelper.getInstance(Gojuon.getInstance());
    }

    /**
     * 判断是否需要使用手写字体
     *
     * @return
     */
    public static boolean useHandwritingFonts() {
        return getInstance().getSharedPreferences()
                .getBoolean(Gojuon.KEY_USE_HANDWRITING_FONT, true);
    }

    public Typeface getCustomTypeface() {
        if (mCustomTypeface == null) {
            mCustomTypeface = Typeface.createFromAsset(getAssets(), "honoka.ttf");
        }

        return mCustomTypeface;
    }
}