package com.edufound.reader.activity;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.text.InputFilter;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.duer.bot.directive.payload.AmountInfo;
import com.baidu.duer.botsdk.BotIntent;
import com.edufound.reader.R;
import com.edufound.reader.annotation.BindView;
import com.edufound.reader.application.EApplication;
import com.edufound.reader.base.BaseMvpActivity;
import com.edufound.reader.bean.ChannelCodeEnum;
import com.edufound.reader.bean.UserBean;
import com.edufound.reader.botsdk.BotRegisterListener;
import com.edufound.reader.contract.UserInfoSettingContract;
import com.edufound.reader.cusview.CusToast;
import com.edufound.reader.listener.PopUtilClickListener;
import com.edufound.reader.popwindow.PopWindowUtil;
import com.edufound.reader.presenter.UserInfoSettingPresenter;
import com.edufound.reader.util.Consts;
import com.edufound.reader.util.EfunboxUtil;
import com.edufound.reader.util.GlideUtils;
import com.edufound.reader.util.SizeUtils;
import com.jakewharton.rxbinding4.view.RxView;
import com.orhanobut.logger.Logger;

import java.util.HashMap;

import androidx.annotation.NonNull;
import io.reactivex.rxjava3.annotations.Nullable;

public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPresenter> implements UserInfoSettingContract.View {


    Activity mActivity;
    @BindView(id = R.id.activity_userinfo_setting_back)
    ImageView mBack;

    @BindView(id = R.id.activity_userinfo_setting_loginout_layout)
    LinearLayout mLoginOut;

    @BindView(id = R.id.activity_userinfo_setting_privservices_layout)
    LinearLayout mPrivServices;
    @BindView(id = R.id.activity_userinfo_setting_services_layout)
    LinearLayout mAgreementServices;
    @BindView(id = R.id.activity_userinfo_setting_cancellation_layout)
    LinearLayout mCancellationLayout;
    @BindView(id = R.id.activity_userinfo_setting_bindwechat_layout)
    LinearLayout mBindWeChat;
    @BindView(id = R.id.activity_userinfo_setting_switchuser_layout)
    LinearLayout mSwitchLayout;

    @BindView(id = R.id.activity_userinfo_setting_nickname)
    EditText mNickName;
    @BindView(id = R.id.activity_userinfo_setting_gender_male)
    FrameLayout mGenderMale;
    @BindView(id = R.id.activity_userinfo_setting_gender_female)
    FrameLayout mGenderFeMale;
    @BindView(id = R.id.activity_userinfo_setting_grade)
    TextView mGrade;
    @BindView(id = R.id.activity_userinfo_setting_userhead)
    ImageView mUserHead;
    @BindView(id = R.id.activity_userinfo_setting_userhead_num)
    TextView mUserNum;


    @Override
    public int getLayoutId() {
        return R.layout.activity_userinfo_setting;
    }

    @SuppressLint("AutoDispose")
    @Override
    public void initView() {
        mActivity = this;
        mPresenter = new UserInfoSettingPresenter();
        mPresenter.attachView(this);
        addUiClickListener(mBack, o -> {
            mNickName.clearFocus();
            hideSoftInput();
            mActivity.finish();
        });

        addUiClickListener(mPrivServices, o -> {
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            Intent intent = new Intent(getActivity(), WebActivity.class);
            intent.putExtra("loadUrl", Consts.getPrivServiceUrl());
            getActivity().startActivity(intent);
        });
        addUiClickListener(mAgreementServices, o -> {
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            Intent intent = new Intent(getActivity(), WebActivity.class);
            intent.putExtra("loadUrl", Consts.getAgreementServicesUrl());
            getActivity().startActivity(intent);
        });

        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
            //百度渠道,隐藏注销和退出登录按钮
            mCancellationLayout.setVisibility(View.GONE);
            mLoginOut.setVisibility(View.GONE);
        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
            //义方渠道
            mCancellationLayout.setVisibility(View.VISIBLE);
            mLoginOut.setVisibility(View.VISIBLE);
        }
        addUiClickListener(mLoginOut, o -> {
            Logger.e("mLoginOut");
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            PopWindowUtil.showExitLoginWindow(mActivity, getRootView(), new PopUtilClickListener() {
                @Override
                public void clickCancel() {

                }

                @Override
                public void clickSubmit(Object obj) {
                    Toast.makeText(mActivity, "退出账号", Toast.LENGTH_SHORT).show();
                    mPresenter.loginOut();
                }
            });
        });
        addUiClickListener(mCancellationLayout, o -> {
            Logger.e("註銷按鈕");
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            PopWindowUtil.showCancellationAccountWindow(mActivity, getRootView(), new PopUtilClickListener() {
                @Override
                public void clickCancel() {

                }

                @Override
                public void clickSubmit(Object obj) {
                    Toast.makeText(mActivity, "注销账号", Toast.LENGTH_SHORT).show();
                    mPresenter.userCancellation();
                }
            });
        });

        addUiClickListener(mBindWeChat, o -> {
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            PopWindowUtil.showBindWeChatWindow(mActivity, getRootView(), null);
        });
        addUiClickListener(mSwitchLayout, o -> {
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            EfunboxUtil.userLogin(getActivity());
        });

        addUiClickListener(mGenderMale, o -> {
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            mGenderMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_true_bg);
            mGenderFeMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_bg);
            mPresenter.upadteMyInfo(Consts.getmConstsUserBean());

        });
        addUiClickListener(mGenderFeMale, o -> {
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            mGenderMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_bg);
            mGenderFeMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_true_bg);
            mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
        });
        addUiClickListener(mGrade, o -> {
            if (mNickName.hasFocus()) {
                mNickName.clearFocus();
                return;
            }
            PopWindowUtil.showSelectGradeWindow(getActivity(), getRootView(), EfunboxUtil.getIndexGradeByEnum(mPresenter.getGradeEnum()), new PopUtilClickListener() {
                @Override
                public void clickCancel() {

                }

                @Override
                public void clickSubmit(Object object) {
//                    Toast.makeText(getActivity(), "选择了:" + EfunboxUtil.getEnumByCNGrade(object.toString()), Toast.LENGTH_SHORT).show();
                    Consts.getmConstsUserBean().setGrade(EfunboxUtil.getEnumByCNGrade(object.toString()));
                    mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
                }
            });
        });
        RxView.focusChanges(mNickName).subscribe(hasFocus -> {
            if (!hasFocus) {
                if (TextUtils.isEmpty(mNickName.getText().toString())) {
//                    Toast.makeText(getActivity(), "请输入昵称", Toast.LENGTH_SHORT).show();
                    return;
                }
                hideSoftInput();
                Consts.getmConstsUserBean().setNickName(mNickName.getText().toString().trim());
                mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
            } else {
                mNickName.setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)});
            }

        });
        mNickName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                if (actionId == KeyEvent.ACTION_DOWN || actionId == EditorInfo.IME_ACTION_DONE) {
                    if (TextUtils.isEmpty(mNickName.getText().toString())) {
//                        CusToast.getInstance(mActivity).show("请输入昵称", 2000);
                        Toast.makeText(mActivity, "请输入昵称", Toast.LENGTH_SHORT).show();
                        return true;
                    }
                    hideSoftInput();
                    Consts.getmConstsUserBean().setNickName(mNickName.getText().toString().trim());
                    mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
                    mNickName.clearFocus();
                    return true;
                }
                return false;
            }
        });
        if (Consts.getmConstsBaiDuUserBean() != null) {
            mUserNum.setText("账号:" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId());
        }
        mPresenter.getMyInfo();
    }

    private void hideSoftInput() {
        InputMethodManager manager = ((InputMethodManager) Consts.getmApplicAtion().getSystemService(Context.INPUT_METHOD_SERVICE));
        if (manager != null) {
            manager.hideSoftInputFromWindow(mNickName.getWindowToken(), 0);
        }
    }

    @Override
    public void onGetDisconnect() {

    }

    @Override
    public void onGetMobileConnect() {

    }

    @Override
    public void onGetWifiConnect() {

    }


    @Override
    public void showLoading() {

    }

    @Override
    public void hideLoading() {

    }

    @Override
    public void onError(String errMessage) {

    }

    @Override
    public Activity getActivity() {
        return mActivity;
    }

    @Override
    public void getUserInfoSuccess(UserBean bean) {
        if (bean.getNickName().length() <= 6) {
            mNickName.setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)});
        } else {
            mNickName.setFilters(new InputFilter[]{new InputFilter.LengthFilter(11)});
        }
        mNickName.setText(bean.getNickName());
        mGrade.setText(EfunboxUtil.getCNGradeByEnum(bean.getGrade()));
        if (bean.getGender().equals("1")) {
            //男孩子
            mGenderMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_true_bg);
            mGenderFeMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_bg);
            GlideUtils.loadImage(getActivity(), R.drawable.activity_userinfo_setting_boy, mUserHead);
        } else if (bean.getGender().equals("0")) {
            //女孩子
            mGenderMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_bg);
            mGenderFeMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_true_bg);
            GlideUtils.loadImage(getActivity(), R.drawable.activity_userinfo_setting_girl, mUserHead);
        }
        if (bean.getAvatar() == null || bean.getAvatar().equals("")) {
        } else {
            GlideUtils.loadCircleWithBorderImage(getActivity(), bean.getAvatar(), mUserHead, SizeUtils.px2dp(getActivity(), 10), Color.WHITE);
        }
    }

    @Override
    public void loginOutSuccess() {
        for (int i = 0; i < EApplication.mActivityList.size(); i++) {
            EApplication.mActivityList.get(i).finish();
        }
        Intent intent = new Intent(getActivity(), MainActivity.class);
        intent.putExtra("defaultIndex", 1);
        startActivity(intent);
    }

    @Override
    protected void onDestroy() {
        mPresenter.activityDestory();
        super.onDestroy();
    }

    @Override
    protected void botHandleIntent(BotIntent intent, String customData) {
        super.botHandleIntent(intent, customData);
        Logger.e(getLocalClassName() + "botHandleIntent");
    }

    @Override
    protected void botOnClickLink(String url, HashMap<String, String> paramMap) {
        super.botOnClickLink(url, paramMap);
        Logger.e(getLocalClassName() + "botOnClickLink");
    }

    @Override
    protected void botOnHandleScreenNavigatorEvent(int event) {
        super.botOnHandleScreenNavigatorEvent(event);
        Logger.e(getLocalClassName() + "botOnHandleScreenNavigatorEvent");
    }

    @Override
    protected void botOnLinkAccountSucceed(String s, String s1) {
        super.botOnLinkAccountSucceed(s, s1);
        Logger.e(getLocalClassName() + "botOnLinkAccountSucceed");
//        RequestBotSdkUtil.requestBuyProduct();
    }

    @Override
    protected void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
        super.botOnChargeStatusUpdated(purchaseResult, authorizationAmount, capturedAmount, creationTimestamp, baiduOrderReferenceId, sellerOrderId, msg);
        Logger.e(getLocalClassName() + "botOnChargeStatusUpdated");
    }

    @Override
    protected void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
        super.botOnBuyStatusUpdated(purchaseResult, productId, baiduOrderId, sellerOrderId, msg, token);
        Logger.e(getLocalClassName() + "botOnBuyStatusUpdated");
    }

    @Override
    protected void refUserInfo(UserBean bean) {
        super.refUserInfo(bean);
        getUserInfoSuccess(bean);
    }
}