package com.app.input.inputaura.nggfsdfds;

import android.annotation.SuppressLint;
import android.graphics.drawable.Drawable;
import android.inputmethodservice.InputMethodService;

import android.media.MediaPlayer;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.ImageView;
import android.widget.VideoView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.bumptech.glide.Glide;
import com.bumptech.glide.integration.webp.decoder.WebpDrawable;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.app.input.inputaura.InputAura;
import com.app.input.inputaura.R;
import com.app.input.inputaura.kfsdfbsd.GdfhNtf;
import com.app.input.inputaura.kfsdfbsd.IutFhfg;
import com.app.input.inputaura.kfsdfbsd.UbgKff;
import com.app.input.inputaura.onhvtgfs.VuhTg;
import com.app.input.inputaura.onhvtgfs.HiyFhg;


import kotlin.Unit;
import kotlin.jvm.functions.Function2;

public class PyvTbu extends InputMethodService implements HiyFhg.OnKeyboardActionListener {


    private RvyIub rvyIub;
    private VuhTg mKeyBoard;
    private View parentView;


    private ImageView imBG;
    private VideoView videoView;

    private int a = R.xml.xml_one;
    private int b = R.xml.xml_two;
    private int c = R.xml.xml_three;

    private int curImeAction = EditorInfo.IME_ACTION_UNSPECIFIED;

    @SuppressLint("InflateParams")
    @Override
    public View onCreateInputView() {
        parentView = getLayoutInflater().inflate(R.layout.uususs, null);
        findView();
        return parentView;
    }

    private void findView() {

        imBG = parentView.findViewById(R.id.gif_bg);
        videoView = parentView.findViewById(R.id.video_view);
        mKeyBoard = new VuhTg(this, a);
        rvyIub = parentView.findViewById(R.id.custom_input_view);
        rvyIub.setEnabled(true);
        rvyIub.setPreviewEnabled(false);
        rvyIub.setKeyboard(mKeyBoard);
        rvyIub.setOnKeyboardActionListener(this);
    }


    @Override
    public void onWindowHidden() {
        super.onWindowHidden();
        if (videoView.isPlaying()) {
            videoView.pause();

        }
    }

    @Override
    public void onWindowShown() {
        super.onWindowShown();
        EditorInfo currentInputEditorInfo = getCurrentInputEditorInfo();
        curImeAction = IutFhfg.INSTANCE.getTextForImeAction(currentInputEditorInfo.imeOptions);
        String skinPath = UbgKff.INSTANCE.getSkinPath();

        if (skinPath == null || skinPath.isEmpty()) {
            Log.d(InputAura.TAG, "---------skinPath= bull");
            rvyIub.updateUi(curImeAction);
        } else {
            Log.d(InputAura.TAG, "---------skinPath= 1111");
            QunSg.INSTANCE.readBgOrVideo(this, new Function2<String, Drawable, Unit>() {
                @Override
                public Unit invoke(String s, Drawable drawable) {
                    Log.d(InputAura.TAG, "---------s= " + s + "---------drawable=" + drawable);
                    if (s != null) {
                        rvyIub.setBackground(null);
                        if (s.endsWith(".gif")) {
                            imBG.setVisibility(View.VISIBLE);
                            videoView.setVisibility(View.GONE);
                            Glide.with(PyvTbu.this)
                                    .load(s)
                                    .addListener(new RequestListener<Drawable>() {
                                        @Override
                                        public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target<Drawable> target, boolean isFirstResource) {
                                            return false;
                                        }

                                        @Override
                                        public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target<Drawable> target, @NonNull DataSource dataSource, boolean isFirstResource) {
                                            if (resource instanceof WebpDrawable) {
                                                ((WebpDrawable) resource).setLoopCount(WebpDrawable.LOOP_FOREVER);
                                            }
                                            return false;
                                        }
                                    }).into(imBG);
                        } else if (s.endsWith(".mp4")) {
                            imBG.setVisibility(View.GONE);
                            videoView.setVisibility(View.VISIBLE);
                            videoView.setVideoPath(s);
                            videoView.start();
                            videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                                @Override
                                public void onPrepared(MediaPlayer mp) {
                                    mp.setLooping(true);
                                }
                            });
                        }

                    } else {
                        rvyIub.setBackground(drawable);
                    }
                    rvyIub.updateUi(curImeAction);
                    return null;
                }
            });
        }


    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (videoView != null) {
            videoView.stopPlayback();
        }
    }

    @Override
    public void onPress(int primaryCode) {

    }

    @Override
    public void onRelease(int primaryCode) {

    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {

        InputConnection curInputConnect = getCurrentInputConnection();
        switch (primaryCode) {
            case GdfhNtf.KEY_CODE_DELETE:
                curInputConnect.deleteSurroundingText(1, 0);
                break;
            case GdfhNtf.KEY_CODE_SHIFT:
                switchShift();
                break;
            case GdfhNtf.KEY_CODE_NUMBER_SHIFT:
            case GdfhNtf.KEY_CODE_SYMBOL_SHIFT:
                switchMoreOrNumber();
                break;
            case GdfhNtf.KEY_CODE_CHANGE_NUMBER:
            case GdfhNtf.KEY_CODE_BACK:
                switchNormalOrNumber();
                break;

            case GdfhNtf.KEY_CODE_COMPLETE:
            case GdfhNtf.KEY_CODE_CANCEL:
                curInputConnect.performEditorAction(curImeAction);
//                curInputConnect.performEditorAction(EditorInfo.IME_ACTION_DONE);
                break;
            default:
                String codeToChar = QunSg.INSTANCE.primaryCodeToChar(primaryCode);
                curInputConnect.commitText(codeToChar, 1);
                if (rvyIub.isLowerCase() == 1) {
                    //自动转小写
                    rvyIub.setLowerCase(0);
                    QunSg.INSTANCE.keyToLowerCase(mKeyBoard);
                    rvyIub.setKeyboard(mKeyBoard);
                }
                break;

        }


    }

    private void switchMoreOrNumber() {
        int mode = rvyIub.getMode();
        switch (mode) {
            case 1:
                mKeyBoard = new VuhTg(this, c);
                rvyIub.setMode(2);
                rvyIub.setKeyboard(mKeyBoard);
                break;
            case 2:
                mKeyBoard = new VuhTg(this, b);
                rvyIub.setMode(1);
                rvyIub.setKeyboard(mKeyBoard);
                break;
        }

    }

    private void switchNormalOrNumber() {
        int mode = rvyIub.getMode();
        switch (mode) {
            case 0:
                mKeyBoard = new VuhTg(this, b);
                rvyIub.setMode(1);
                rvyIub.setKeyboard(mKeyBoard);
                break;
            case 1:
            case 2:
                mKeyBoard = new VuhTg(this, a);
                rvyIub.setMode(0);
                rvyIub.setKeyboard(mKeyBoard);
                break;
        }

    }

    private void switchShift() {
        int lowerCase = rvyIub.isLowerCase();
        switch (lowerCase) {
            case 0:
                //当前小写转大写
                rvyIub.setLowerCase(1);
                QunSg.INSTANCE.keyToUpper(mKeyBoard);
                rvyIub.setKeyboard(mKeyBoard);
                break;
            case 1:
                //当前大写转锁定大写
                rvyIub.setLowerCase(2);
                break;
            case 2:
                //当前锁定大写转小写
                rvyIub.setLowerCase(0);
                QunSg.INSTANCE.keyToLowerCase(mKeyBoard);
                rvyIub.setKeyboard(mKeyBoard);
                break;
        }
    }


    @Override
    public void onText(CharSequence text) {

    }

    @Override
    public void swipeLeft() {

    }

    @Override
    public void swipeRight() {

    }

    @Override
    public void swipeDown() {

    }

    @Override
    public void swipeUp() {

    }


}
