package com.app.input.personalised.board.boartactivity;

import static com.bumptech.glide.request.RequestOptions.bitmapTransform;

import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.WindowManager;

import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.app.input.personalised.board.R;
import com.app.input.personalised.board.databinding.ActivityThemePreviewBinding;
import com.app.input.personalised.board.helpers.KeyboardConstants;
import com.app.input.personalised.board.helpers.AppUtils;
import com.app.input.personalised.board.helpers.ThemePreferences;
import com.bumptech.glide.Glide;
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 jp.wasabeef.glide.transformations.BlurTransformation;


public class ThemePreviewActivity extends AppCompatActivity {
    private ActivityThemePreviewBinding vb;
    public static String key_name = "key_name";
    private int mPreviousKeyboardHeight = -1;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        vb = ActivityThemePreviewBinding.inflate(getLayoutInflater());
        EdgeToEdge.enable(this);
        setContentView(vb.getRoot());
        com.app.input.personalised.board.helpers.StatusBarHelper.INSTANCE.setTransparentStatusBar(this);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        // 延迟设置状态栏，确保覆盖MaterialComponents主题可能的自动设置
        findViewById(R.id.main).post(() -> {
            com.app.input.personalised.board.helpers.StatusBarHelper.INSTANCE.setTransparentStatusBar(this);
        });

        onInit();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 确保状态栏始终为透明
        com.app.input.personalised.board.helpers.StatusBarHelper.INSTANCE.setTransparentStatusBar(this);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            // 窗口获得焦点时，确保状态栏为透明
            com.app.input.personalised.board.helpers.StatusBarHelper.INSTANCE.setTransparentStatusBar(this);
        }
    }

    public void onInit() {

        String stringExtra = getIntent().getStringExtra(key_name);
        vb.title.setText(stringExtra);

        String curPath = ThemePreferences.INSTANCE.getSkinPath();

        vb.idBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        if (curPath == null) {
            return;
        }

        String bgPath = curPath+"res/drawable-xxhdpi-v4/"+ KeyboardConstants.previewBg;

        Drawable bgDraw = AppUtils.INSTANCE.getBgDrawable(this, bgPath);
        if (bgDraw != null) {

            Glide.with(this)
                    .load(bgDraw)
                    .apply(bitmapTransform(new BlurTransformation(15, 3))) // 设置模糊半径和模糊采样
                    .listener(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) {
                            vb.main.setBackground(resource);

                            return false;
                        }
                    })
                    .preload();

        }
        keyboardheight();
        vb.et.requestFocus();
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

    }


    private void keyboardheight() {
        final View rootView = getWindow().getDecorView();
        rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {


            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                rootView.getWindowVisibleDisplayFrame(r);
                int screenHeight = rootView.getRootView().getHeight();
                int keypadHeight = screenHeight - r.bottom;

                if (keypadHeight != mPreviousKeyboardHeight) {
                    if (mPreviousKeyboardHeight < keypadHeight) {
                        mPreviousKeyboardHeight = keypadHeight;
                        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) vb.et.getLayoutParams();
                        params.bottomMargin = mPreviousKeyboardHeight;
                        vb.et.setLayoutParams(params);
                    }

                }
            }
        });
    }
}