package com.casic.dcms.view.statistics;

import android.content.Context;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.RadioGroup;

import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

import com.casic.dcms.R;
import com.casic.dcms.databinding.ActivityGridAnalysisBinding;
import com.casic.dcms.model.GridAnalysisBean;
import com.casic.dcms.utils.ColorHub;
import com.casic.dcms.utils.DialogHelper;
import com.casic.dcms.utils.LocaleConstant;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.vm.DataAnalysisViewModel;
import com.casic.dcms.widgets.RangeDateActionSheet;
import com.gyf.immersionbar.ImmersionBar;
import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter;
import com.pengxh.androidx.lite.adapter.ViewHolder;
import com.pengxh.androidx.lite.base.AndroidxBaseActivity;
import com.pengxh.androidx.lite.divider.ItemDecoration;
import com.pengxh.androidx.lite.hub.FloatHub;
import com.pengxh.androidx.lite.hub.IntHub;
import com.pengxh.androidx.lite.hub.LongHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
import com.pengxh.androidx.lite.vm.LoadState;

import java.util.List;

public class GridAnalysisActivity extends AndroidxBaseActivity<ActivityGridAnalysisBinding> {

    private static final String TAG = "GridAnalysisActivity";
    private final Context context = GridAnalysisActivity.this;
    private DataAnalysisViewModel dataAnalysisViewModel;

    @Override
    protected void setupTopBarLayout() {
        ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white));
        ImmersionBar.with(this).statusBarDarkFont(true).init();

        viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4));
        viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish());
    }

    @Override
    protected void initData() {
        dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class);
        dataAnalysisViewModel.gridAnalysisData.observe(this, new Observer<GridAnalysisBean>() {
            @Override
            public void onChanged(GridAnalysisBean gridAnalysisBean) {
                if (gridAnalysisBean.getCode() == 200) {
                    List<GridAnalysisBean.DataModel> dataModels = gridAnalysisBean.getData();
                    int caseCount = 0;
                    for (GridAnalysisBean.DataModel dataModel : dataModels) {
                        caseCount += Integer.parseInt(dataModel.getRegisteredNum());
                    }
                    viewBinding.caseCountView.setText("立案数：" + caseCount);

                    NormalRecyclerAdapter<GridAnalysisBean.DataModel> recyclerAdapter = new NormalRecyclerAdapter<GridAnalysisBean.DataModel>(R.layout.item_alanysis_rv_l, gridAnalysisBean.getData()) {

                        @Override
                        public void convertView(ViewHolder viewHolder, int position, GridAnalysisBean.DataModel item) {
                            //设置随机颜色
                            int[] color = ColorHub.generateColor(context);

                            viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1))
                                    .setBackgroundColor(R.id.numberTagView, color[0])
                                    .setTextColor(R.id.numberTagView, color[1])
                                    .setText(R.id.caseSourceView, item.getGridName())
                                    .setText(R.id.caseNumView, item.getRegisteredNum());

                            ProgressBar progressBar = viewHolder.getView(R.id.frequencyProgressBar);
                            progressBar.setProgress((int) (Float.parseFloat(item.getRate()) * 100));
                        }
                    };
                    viewBinding.gridAnalysisViewView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15)));
                    viewBinding.gridAnalysisViewView.setAdapter(recyclerAdapter);
                }
            }
        });
    }

    @Override
    protected void observeRequestState() {
        dataAnalysisViewModel.loadState.observe(this, new Observer<LoadState>() {
            @Override
            public void onChanged(LoadState loadState) {
                if (loadState == LoadState.Loading) {
                    DialogHelper.showLoadingDialog(context, "数据加载中，请稍后");
                } else {
                    DialogHelper.dismissLoadingDialog();
                }
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        //默认加载当前时间往前一个月的
        dataAnalysisViewModel.getGridAnalysis(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis()));
    }

    @Override
    protected void initEvent() {
        viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() {
                    @Override
                    public void onDateRangeSelected(String startDate, String endDate) {
                        dataAnalysisViewModel.getGridAnalysis(startDate, endDate);
                    }
                }).build().show();
            }
        });

        viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == R.id.oneMonthRadioButton) {
                    dataAnalysisViewModel.getGridAnalysis(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis()));
                } else if (checkedId == R.id.threeMonthRadioButton) {
                    dataAnalysisViewModel.getGridAnalysis(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis()));
                } else {
                    dataAnalysisViewModel.getGridAnalysis(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis()));
                }
            }
        });
    }
}
