package com.rnboat.framework.base;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

import com.rnboat.framework.ConfigManager;
import com.rnboat.framework.R;
import com.wang.avi.AVLoadingIndicatorView;


/**
 * Created by Castiel on 2018/4/4.
 */

public class BaseActivity extends Activity {
    private static final String TAG = "BaseActivity";

    protected Dialog mLoadingDialog;
    private int hideTriggerNumber = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if (!isMainActivity())
            overridePendingTransition(R.anim.slide_in_from_right, R.anim.slide_out_from_left);
        showLoadingDialog();
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            configureSystemUI(getWindow().getDecorView());
        }
    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.slide_in_from_left, R.anim.slide_out_from_right);
    }

    public void showLoadingDialog() {
        if (mLoadingDialog == null) {
            mLoadingDialog = new Dialog(this, R.style.DialogFullscreen);
            View view = LayoutInflater.from(this).inflate(R.layout.rn_dialog_view, null);
//            view.setOnClickListener(new View.OnClickListener() {
//                @Override
//                public void onClick(View v) {
//                    mLoadingDialog.dismiss();
//                }
//            });
            configureSystemUI(view);
            mLoadingDialog.setContentView(view);
        }

        mLoadingDialog.setCancelable(true);
        AVLoadingIndicatorView aviView;
        if (!mLoadingDialog.isShowing()) {
            if (isMainActivity()) {
                mLoadingDialog.findViewById(R.id.txtStatus).setVisibility(View.VISIBLE);
                mLoadingDialog.findViewById(R.id.aviMain).setVisibility(View.VISIBLE);
                mLoadingDialog.findViewById(R.id.aviSub).setVisibility(View.INVISIBLE);

                aviView = (AVLoadingIndicatorView) mLoadingDialog.findViewById(R.id.aviMain);
            } else {
                aviView = (AVLoadingIndicatorView) mLoadingDialog.findViewById(R.id.aviSub);
            }

            mLoadingDialog.show();
            aviView.smoothToShow();
        }

    }

    public void hideLoadingDialog(int triggerNumber) {
        if (mLoadingDialog != null) {
            if (triggerNumber != 0) {
                hideTriggerNumber++;
            }

            if (hideTriggerNumber >= triggerNumber) {
                AVLoadingIndicatorView aviView = (AVLoadingIndicatorView) mLoadingDialog.findViewById(R.id.aviMain);
                AVLoadingIndicatorView aviSub = (AVLoadingIndicatorView) mLoadingDialog.findViewById(R.id.aviSub);
                TextView txtStatus = (TextView) mLoadingDialog.findViewById(R.id.txtStatus);

                aviView.smoothToHide();
                aviSub.smoothToHide();
                txtStatus.startAnimation(AnimationUtils.loadAnimation(txtStatus.getContext(), android.R.anim.fade_out));
                txtStatus.setVisibility(View.INVISIBLE);

                mLoadingDialog.dismiss();
            }
        }
    }

    public void sendLoadingError(int resId, boolean showCloseBtn) {
        mLoadingDialog.findViewById(R.id.txtStatus).setVisibility(View.VISIBLE);
        mLoadingDialog.findViewById(R.id.btnExitApp).setVisibility(showCloseBtn ? View.VISIBLE : View.INVISIBLE);
        mLoadingDialog.findViewById(R.id.btnExitApp).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent finishIntent = new Intent();
                finishIntent.setAction(RNBoatApplication.APP_FINISH_ACTION);
                sendBroadcast(finishIntent);
            }
        });
        ((TextView) mLoadingDialog.findViewById(R.id.txtStatus)).setText(resId);
    }

    public void configureSystemUI(View view) {
        if (ConfigManager.APPCONFIG != null && ConfigManager.APPCONFIG.getApp() != null && ConfigManager.APPCONFIG.getApp().isFullscreen()) {
            if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
                view.setSystemUiVisibility(View.GONE);
            } else if (Build.VERSION.SDK_INT >= 19) {
                int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
                view.setSystemUiVisibility(uiOptions);
            }
        } else {
            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
        }
    }

    private boolean isMainActivity() {
        return getClass().getSimpleName().equals("MainActivity");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        hideLoadingDialog(0);
    }
}
