package com.meis.base.mei.dialog;

import android.app.Dialog;
import android.content.DialogInterface;
import android.support.annotation.IdRes;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.View;
import android.view.WindowManager;

import com.meis.base.R;

/**
 * desc:
 * author: ws
 * date: 2018/4/19.
 */

public class MeiCompatDialogDelegate {
    private IMeiCompatDialog mMeiCompatDialog;
    private AppCompatDialogFragment mFragment;

    private boolean mImmersive = false;

    private DialogInterface.OnDismissListener mOnDismissListener;

    public MeiCompatDialogDelegate(IMeiCompatDialog meiCompatDialog) {
        if (!(meiCompatDialog instanceof AppCompatDialogFragment)) {
            throw new RuntimeException("Must extends Fragment");
        }
        mMeiCompatDialog = meiCompatDialog;
        mFragment = (AppCompatDialogFragment) meiCompatDialog;
    }

    public Dialog onCreateDialog(Dialog dialog) {
        if (mImmersive) {
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
        }
        return dialog;
    }


    public <T extends View> T findViewById(@IdRes int id) {
        return (T) mFragment.getView().findViewById(id);
    }

    /**
     * 沉浸模式下调用这个方法
     *
     * @param activity
     */
    public void showImmersive(FragmentActivity activity) {
        try {
            mImmersive = true;
            activity.getSupportFragmentManager().beginTransaction().add(mFragment, "dialog_" + mFragment.getClass()
                    .getSimpleName()).commitNowAllowingStateLoss();
            mFragment.getDialog().getWindow().getDecorView().setSystemUiVisibility(
                    mFragment.getActivity().getWindow().getDecorView().getSystemUiVisibility()
            );
            mFragment.getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void setFullScreen() {
        mFragment.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.MeiBaseDialog);
    }

    public void onDismiss(DialogInterface dialog) {
        if (mOnDismissListener != null) {
            mOnDismissListener.onDismiss(dialog);
        }
    }

    public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
        mOnDismissListener = onDismissListener;
    }

    public void dismiss() {
        mFragment.dismissAllowingStateLoss();
    }

}