package com.dayu.usercenter.ui.fragment;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.alibaba.android.arouter.launcher.ARouter;
import com.dayu.base.ui.fragment.BaseFragment;
import com.dayu.common.Constants;
import com.dayu.event.UserInfo;
import com.dayu.provider.event.CertificationEvent;
import com.dayu.provider.router.RouterPath;
import com.dayu.usercenter.R;
import com.dayu.usercenter.data.protocol.EngineerInfo;
import com.dayu.usercenter.data.protocol.OrderRecord;
import com.dayu.usercenter.data.protocol.TodayAchievement;
import com.dayu.usercenter.databinding.FragmentHomeUserBinding;
import com.dayu.usercenter.event.RefreshUserInfoEvent;
import com.dayu.usercenter.event.RefreshUserRecordEvent;
import com.dayu.usercenter.presenter.homeuser.HomeUserContract;
import com.dayu.usercenter.presenter.homeuser.HomeUserPresenter;
import com.dayu.usercenter.ui.activity.WithdrawalsActivity;
import com.dayu.usercenter.ui.activity2.UserInfoActivity;
import com.dayu.utils.CommonUtils;
import com.dayu.utils.ProgressUtil;
import com.dayu.utils.SPUtils;
import com.dayu.utils.UserManager;
import com.dayu.widgets.CustomDialog;
import com.umeng.analytics.MobclickAgent;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

/**
 * Created by luofan
 * on 2017/11/20.
 */

public class HomeUserFragment extends BaseFragment<HomeUserPresenter, FragmentHomeUserBinding>
        implements HomeUserContract.View {
    private static final String TAG = "HomeUserFragment";
    private String mUserName;
    private String mUserPhone;
    private String mScore;
    private int mAccountBalance;

    public static HomeUserFragment newInstance() {
        Bundle args = new Bundle();
        HomeUserFragment fragment = new HomeUserFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void initView() {
        initUser();
        ProgressUtil.startLoad(mActivity);
        EventBus.getDefault().register(this);
//        mPresenter.getAllData(userId, siteId);
//        mPresenter.getAlipayAccount(userId);
        mBind.refreshLayout.setEnableLoadMore(false);
        mBind.refreshLayout.setOnRefreshListener(refreshLayout -> mPresenter.getAllData(mUserId));
    }

    @Override
    public void setPresenter() {
        mBind.setPresenter(mPresenter);
    }

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

    @Override
    protected void lazyLoad() {
        super.lazyLoad();
        showDialog();
        mPresenter.getAllData(mUserId);
//        mPresenter.getAlipayAccount(userId);
    }

    @Override
    public void getPersonalInfoSuccess(EngineerInfo info) {
        if (TextUtils.isEmpty(info.getIdentity())) {
            SPUtils.put("USER_IDENTITY", "");
        } else {
            SPUtils.put("USER_IDENTITY", info.getIdentity());
        }
        mUserName = info.getRealName();
        mBind.tvAge.setText(info.getAge() + mActivity.getString(R.string.age));
        if (info.getGender() == 1) {
            mBind.tvSex.setText(mActivity.getString(R.string.man));
        } else if (info.getGender() == 0) {
            mBind.tvSex.setText(mActivity.getString(R.string.female));
        }
        if (TextUtils.isEmpty(mUserName)) {
            mBind.tvName.setText(mActivity.getString(R.string.unknown));
        } else {
            mBind.tvName.setText(mUserName);
        }
        if (TextUtils.isEmpty(info.getIdentity())) {
            mBind.tvSex.setText(mActivity.getString(R.string.unknown));
            mBind.tvAge.setText(mActivity.getString(R.string.unknown));
        }
        if (UserManager.getInstance().getUser().getDetectStatus() == 1 && !TextUtils.isEmpty((String) SPUtils.get("USER_IDENTITY", ""))) {
            mBind.ivAudited.setImageResource(R.drawable.icon_authentication);
        } else {
            mBind.ivAudited.setImageResource(R.drawable.icon_unauthentication);
        }
        mUserPhone = info.getMobile();
        mBind.tvPhone.setText(mUserPhone);
        SPUtils.put("USER_PHONE", mUserPhone);
        SPUtils.put("USER_NAME", mUserName);
        mPresenter.mUrl.set(info.getAccountUrl());
        UserInfo userInfo = UserManager.getInstance().getUser();
        if (userInfo != null) {
            userInfo.setHeaderImg(info.getAccountUrl());
            UserManager.getInstance().saveUser(userInfo);
        }
    }

    @Override
    public void getAchievementSuccess(TodayAchievement achievement) {
        if (achievement.getAchievement() != 0) {
            mBind.tvLicence.setText(achievement.getAchievement() + "");
        }
    }

    @Override
    public void getOrderRecordSuccess(OrderRecord record) {
        mBind.refreshLayout.finishRefresh();
        //认证资质
        mBind.tvLicence.setText(record.getLicenceInfoNum() + "");
        //工单记录
        mBind.tvWorkOrders.setText(record.getOrderRecord() + "");
        //个人评分
        mBind.tvScore.setText(record.getScore() + mActivity.getString(R.string.score));
        mScore = record.getScore() + "";
        drawStars(mBind.tvStar, mScore, "5");

        mBind.tvSaleReward.setText(""+record.getSalesPrice());
        mBind.tvSaleRecord.setText(record.getSalesCount() + "");
        mBind.tvServiceIncome.setText(""+record.getServiceTotalPrice());
        mBind.tvBusinessType.setText(record.getCategoryCounts()+"");
    }


    @Override
    public void showAlipayDialog() {
        boolean isShow = (boolean) SPUtils.get(Constants.IS_SHOW_ALIPAY_DILAOG, true);
        if (isShow) {
            showAlertDialog();
            SPUtils.put(Constants.IS_SHOW_ALIPAY_DILAOG, false);
        }
    }

    @Override
    public void dumpToOrderRecord() {

    }


    @Override
    public void dumpToSetting() {
        ARouter.getInstance().build(RouterPath.PATH_SETTING).navigation();
//        startActivity(UserInfoActivity.class);
        MobclickAgent.onEvent(mActivity, "setting");
    }

    @Override
    public void requestError() {
        mBind.refreshLayout.finishRefresh();
    }


    private void showAlertDialog() {
        CustomDialog dialog = new CustomDialog(mActivity, R.style.CustomDialog, mActivity.getString(R.string.not_set_account)
                , (dialog1, confirm) -> {
            if (confirm) {
                Intent intent = new Intent(mActivity, WithdrawalsActivity.class);
                startActivity(intent);
                dialog1.dismiss();
                MobclickAgent.onEvent(mActivity, "sure_set_account");
            } else {
                MobclickAgent.onEvent(mActivity, "cancle_set_account");
            }
            dialog1.dismiss();
        });
        dialog.setTitle(mActivity.getString(R.string.notice))
                .setNegativeButton(mActivity.getString(R.string.not_set_up))
                .setPositiveButton(mActivity.getString(R.string.go_set_up));
        dialog.show();
    }

    /**
     * drawStars.
     *
     * @param starLinearLayout .
     * @param lev              .
     * @param totalLevel       .
     */
    private void drawStars(LinearLayout starLinearLayout, String lev, String totalLevel) {
        String level = "0";
        if (!TextUtils.isEmpty(lev)) {
            level = lev;
        }
        int max = Integer.parseInt(totalLevel);
        int beginNum = 0;
        int endNum = max;
        boolean isNedHalf = false;
        if (!TextUtils.isEmpty(level)) {
            if (Float.parseFloat(level) > max) {
                beginNum = max;
                endNum = max - beginNum;
            } else {
                Float levelf = Float.parseFloat(level);
                int leveli = Math.round(levelf);
                if (leveli > levelf) {
                    beginNum = leveli - 1;
                    endNum = (max - 1) - beginNum;
                    isNedHalf = true;
                } else {
                    beginNum = leveli;
                    endNum = max - beginNum;
                }
            }
        }

        starLinearLayout.removeAllViews();

        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.setMargins(3, 0, 3, 0);
        for (int i = 0; i < beginNum; i++) {
            ImageView starImg = new ImageView(mActivity);
            Bitmap bm = BitmapFactory.decodeResource(mActivity.getResources(), R.drawable.
                    person_xingxing);
            starImg.setImageBitmap(bm);
            starLinearLayout.addView(starImg, layoutParams);
        }


        if (isNedHalf) {
            ImageView starImg = new ImageView(mActivity);
            Bitmap bm = BitmapFactory.decodeResource(mActivity.getResources(), R.drawable.person_banxing);
            starImg.setImageBitmap(bm);
            starLinearLayout.addView(starImg, layoutParams);
        }

        for (int i = 0; i < endNum; i++) {
            ImageView starImg = new ImageView(mActivity);
            Bitmap bm = BitmapFactory.decodeResource(mActivity.getResources(), R.drawable.
                    person_xing);
            starImg.setImageBitmap(bm);
            starLinearLayout.addView(starImg, layoutParams);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        UserInfo userInfo = UserManager.getInstance().getUser();
        if (userInfo != null) {
            mPresenter.mUrl.set(userInfo.getHeaderImg());
        }
    }


    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (hidden) {
            MobclickAgent.onPageEnd(TAG);
        } else {
            MobclickAgent.onPageStart(TAG);
        }
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void certifiCation(CertificationEvent event) {
        mPresenter.getAllData(mUserId);
    }

    @Subscribe
    public void refreshRecord(RefreshUserRecordEvent event){
        mPresenter.getRecordInfo();
    }

    @Subscribe
    public void refreshUser(RefreshUserInfoEvent event){
        mPresenter.getUserInfo();
    }
}