package com.electric.chargingpile.fragment;

import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.v4.app.DialogFragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.electric.chargingpile.R;
import com.electric.chargingpile.iview.SoftKeyBoardListener;
import com.electric.chargingpile.util.DensityUtil;

public class CommonDialogFragment extends DialogFragment {
    public static final String DialogTypeComment = "dialog_type_comment";
    public static final String DialogTypeReply = "dialog_type_reply";

    private static final String TAG = "CommonDialogFragment";
    private static final String ARG_COMMENT = "comment";
    private static final String ARG_HINT = "hint";
    private static final String ARG_TYPE = "type";
    private Dialog dialogFragment;
    private String type;
    private EditText editText;
    private TextView send;
    public OnCommonDialogFragmentListener commonDialogFragmentListener;
    private ImageView dialogIcon;
    private ConstraintLayout countInfo;
    private TextView count;

    public static CommonDialogFragment newInstance(String comment,String hint, String type) {
        CommonDialogFragment dialogFragment = new CommonDialogFragment();
        Bundle args = new Bundle();
        args.putString(ARG_COMMENT, comment);
        args.putString(ARG_HINT, hint);
        args.putString(ARG_TYPE, type);
        dialogFragment.setArguments(args);
        return dialogFragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final String comment = getArguments().getString(ARG_COMMENT);
        final String hint = getArguments().getString(ARG_HINT);
        type = getArguments().getString(ARG_TYPE);

        dialogFragment = new Dialog(getActivity(), R.style.BottomDialog);
        // 外部点击设置为可取消
        dialogFragment.setCancelable(true);
        dialogFragment.setCanceledOnTouchOutside(true);

        dialogFragment.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialogFragment.setContentView(R.layout.fragment_common_dialog);

        Window window = dialogFragment.getWindow();
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        // 布局属性位于整个窗口底部
        layoutParams.gravity = Gravity.BOTTOM;
        // 布局属性宽度填充整个窗口,默认是有margin的
        layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        window.setAttributes(layoutParams);

        countInfo = dialogFragment.findViewById(R.id.countInfo);
        count = dialogFragment.findViewById(R.id.count);
        dialogIcon = dialogFragment.findViewById(R.id.dialogIcon);
        editText = dialogFragment.findViewById(R.id.dialogEdit);
        send = dialogFragment.findViewById(R.id.dialogPublish);

        editText.setText(comment);
        editText.setSelection(comment.length());
        editText.setHint(hint);
        updateView(comment);

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (commonDialogFragmentListener != null && editText.getText().toString().trim().length() > 0) {
                    if (DialogTypeComment.equals(type)) {
                        commonDialogFragmentListener.publish();
                    } else {
                        commonDialogFragmentListener.reply();
                    }
                    dismiss();

                }
            }
        });

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                String comment = charSequence.toString().trim();
                if (comment.length() > 200) {
                    comment = comment.substring(0, 200);
                    editText.setText(comment);
                    editText.setSelection(comment.length());
                }
                updateView(comment);
                if (commonDialogFragmentListener != null) {
                    if (DialogTypeComment.equals(type)) {
                        commonDialogFragmentListener.updateComment(comment);
                    } else {
                        commonDialogFragmentListener.updateReply(comment);
                    }

                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

        // 键盘打开隐藏监听
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(getContext().INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
        SoftKeyBoardListener.setListener(getActivity(), new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {
            @Override
            public void keyBoardShow(int height) {

            }

            @Override
            public void keyBoardHide(int height) {
                dialogFragment.dismiss();
            }
        });
        return dialogFragment;
    }


    private void updateView(String comment) {
        ConstraintLayout.LayoutParams editParams = (ConstraintLayout.LayoutParams) editText.getLayoutParams();

        if (comment.length() > 0) {
            dialogIcon.setVisibility(View.GONE);
            send.setTextColor(Color.parseColor("#00EDB2"));

            countInfo.setVisibility(View.VISIBLE);
            editParams.bottomMargin = DensityUtil.dip2px(getContext(), 20);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            send.setTextColor(Color.parseColor("#7e7e7e"));

            countInfo.setVisibility(View.GONE);
            editParams.bottomMargin = DensityUtil.dip2px(getContext(), 0);
        }

        if (comment.length() == 200) {
            count.setTextColor(Color.parseColor("#FF5858"));
        } else {
            count.setTextColor(Color.parseColor("#ffffff"));
        }

        count.setText(comment.length() + "");
        editText.setLayoutParams(editParams);
    }

    public interface OnCommonDialogFragmentListener {
        void updateComment(String comment);
        void publish();

        void updateReply(String reply);
        void reply();
    }

    public void setOnCommonDialogFragmentListener(OnCommonDialogFragmentListener listener) {
        this.commonDialogFragmentListener = listener;
    }

}