package protect.card_locker;

import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.ColorUtils;

import com.google.android.material.color.MaterialColors;
import com.google.android.material.textview.MaterialTextView;
import com.yalantis.ucrop.UCropActivity;

public class UCropWrapper extends UCropActivity {
    public static final String UCROP_TOOLBAR_TYPEFACE_STYLE = "ucop_toolbar_typeface_style";

    @Override
    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        boolean darkMode = Utils.isDarkModeEnabled(this);
        // setup status bar to look like the rest of the app
        if (Build.VERSION.SDK_INT >= 23) {
            getWindow().getDecorView().setSystemUiVisibility(darkMode ? 0 : View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        } else {
            // icons are always white back then
            if (!darkMode) {
                getWindow().setStatusBarColor(ColorUtils.compositeColors(Color.argb(127, 0, 0, 0), getWindow().getStatusBarColor()));
            }
        }

        // find and check views that we wish to color modify
        // for when we update ucrop or switch to another cropper
        View check = findViewById(com.yalantis.ucrop.R.id.wrapper_controls);
        if (check instanceof FrameLayout) {
            FrameLayout controls = (FrameLayout) check;
            check = findViewById(com.yalantis.ucrop.R.id.wrapper_states);
            if (check instanceof LinearLayout) {
                LinearLayout states = (LinearLayout) check;
                for (int i = 0; i < controls.getChildCount(); i++) {
                    check = controls.getChildAt(i);
                    if (check instanceof AppCompatImageView) {
                        AppCompatImageView controlsBackgroundImage = (AppCompatImageView) check;
                        // everything gathered and are as expected, now perform color patching
                        Utils.patchColors(this);
                        int colorSurface = MaterialColors.getColor(this, R.attr.colorSurface, ContextCompat.getColor(this, R.color.md_theme_light_surface));
                        int colorOnSurface = MaterialColors.getColor(this, R.attr.colorOnSurface, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));

                        Drawable controlsBackgroundImageDrawable = controlsBackgroundImage.getBackground();
                        controlsBackgroundImageDrawable.mutate();
                        controlsBackgroundImageDrawable.setTint(darkMode ? colorOnSurface : colorSurface);
                        controlsBackgroundImage.setBackgroundDrawable(controlsBackgroundImageDrawable);

                        states.setBackgroundColor(darkMode ? colorSurface : colorOnSurface);
                        break;
                    }
                }
            }
        }

        // change toolbar font
        check = findViewById(com.yalantis.ucrop.R.id.toolbar_title);
        if (check instanceof MaterialTextView) {
            MaterialTextView toolbarTextview = (MaterialTextView) check;
            Intent intent = getIntent();
            int style = intent.getIntExtra(UCROP_TOOLBAR_TYPEFACE_STYLE, -1);
            if (style != -1) {
                toolbarTextview.setTypeface(Typeface.defaultFromStyle(style));
            }
        }
    }
}
