package com.android.launcher3.debug;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.R;
import com.android.launcher3.debug.adapter.TimeAdapter;
import com.android.launcher3.debug.adapter.WorkModeAdapter;
import com.android.launcher3.manager.ColumnDef;
import com.android.launcher3.manager.LauncherManager;
import com.android.launcher3.manager.ManagementInfo;
import com.android.launcher3.manager.TimeModeManager;
import com.android.launcher3.model.TimeConfig;
import com.android.launcher3.util.Logger;

import java.sql.Time;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

/**
 * 显示管控信息
 */
public class DebugInfoActivity extends BaseActivity implements View.OnClickListener {

    ImageView iv_back;

    Button btn_change_exit_state;
    TextView tv_exit_status;

    Button btn_intercept_system_settings;
    TextView tv_intercept_system_settings;

    TextView tv_current_work_mode;
    RecyclerView rv_work_mode;

    RecyclerView rv_app_manage_info;

    private WorkModeAdapter workModeAdapter;

    private TimeAdapter timeAdapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_debug_info);

        iv_back = findViewById(R.id.iv_back);
        btn_change_exit_state = findViewById(R.id.btn_change_exit_state);
        tv_exit_status = findViewById(R.id.tv_exit_status);
        btn_intercept_system_settings = findViewById(R.id.btn_intercept_system_settings);
        tv_intercept_system_settings = findViewById(R.id.tv_intercept_system_settings);
        tv_current_work_mode = findViewById(R.id.tv_current_work_mode);

        rv_work_mode = findViewById(R.id.rv_work_mode);
        rv_app_manage_info = findViewById(R.id.rv_app_manage_info);


        iv_back.setOnClickListener(this);
        btn_change_exit_state.setOnClickListener(this);
        btn_intercept_system_settings.setOnClickListener(this);

        workModeAdapter = new WorkModeAdapter();

        rv_work_mode.setLayoutManager(new LinearLayoutManager(this));
        rv_work_mode.setAdapter(workModeAdapter);

        timeAdapter = new TimeAdapter();
        rv_app_manage_info.setLayoutManager(new LinearLayoutManager(this));
        rv_app_manage_info.setAdapter(timeAdapter);

        //TimeModeManager.getInstance(getApplicationContext()).setCurrentWorkModel(ColumnDef.TimeManager.WEEK_RESET);
        //LauncherManager.getInstance().lockScreenNormal(getApplicationContext());

        loadWorkMode();
        loadAppInfo();
        update();
    }

    @Override
    public void onClick(View v) {

        int id = v.getId();
        if (id == R.id.iv_back) {
            finish();
        } else if (id == R.id.btn_change_exit_state) {
            LauncherManager.getInstance().changeExitState(!LauncherManager.getInstance().getExitState());
            update();
        } else if (id == R.id.btn_intercept_system_settings) {
            LauncherManager.getInstance().setInterceptSystemSetting(!LauncherManager.getInstance().isInterceptSystemSetting());
            update();
        }
    }


    private void update() {
        if (LauncherManager.getInstance().getExitState()) {
            btn_change_exit_state.setText("进入管制");
            tv_exit_status.setText("当前未进入管制状态，所有规则均不生效");
            tv_exit_status.setTextColor(getResources().getColor(android.R.color.holo_red_dark));

        } else {
            btn_change_exit_state.setText("退出管制");
            tv_exit_status.setText("当前已进入管制状态，所有规则已生效");
            tv_exit_status.setTextColor(getResources().getColor(android.R.color.black));
        }


        if (LauncherManager.getInstance().isInterceptSystemSetting()) {
            btn_intercept_system_settings.setText("关闭拦截系统设置");
            tv_intercept_system_settings.setText("当前已开启拦截系统设置");
            tv_intercept_system_settings.setTextColor(getResources().getColor(android.R.color.black));

        } else {
            btn_intercept_system_settings.setText("开启拦截系统设置");
            tv_intercept_system_settings.setText("当前已关闭拦截系统设置");
            tv_intercept_system_settings.setTextColor(getResources().getColor(android.R.color.holo_red_dark));
        }
    }


    public void loadWorkMode() {
        switch (TimeModeManager.getInstance(getApplicationContext()).getCurrentWorkModel()) {
            case ColumnDef.TimeManager.HOLIDAY_MODE:
                tv_current_work_mode.setText("当前模式：假期模式");
                break;
            case ColumnDef.TimeManager.WEEK_RESET:
                tv_current_work_mode.setText("当前模式：周末模式");
                break;
            case ColumnDef.TimeManager.WORK_DAY:
                tv_current_work_mode.setText("当前模式：工作日模式");
                break;
            default:
                tv_current_work_mode.setText("当前模式：未设置模式");
        }

        if (TimeModeManager.getInstance(getApplicationContext()).getConfigMap() != null) {
            Iterator<Map.Entry<Integer, TimeConfig>> iterator = TimeModeManager.getInstance(getApplicationContext()).getConfigMap().entrySet().iterator();

            List<TimeConfig> timeConfigs = new ArrayList<>();
            while (iterator.hasNext()) {
                Map.Entry<Integer, TimeConfig> entry = iterator.next();
                timeConfigs.add(entry.getValue());
            }
            workModeAdapter.setTimeConfigs(timeConfigs);
            workModeAdapter.notifyDataSetChanged();
        }

    }


    public void loadAppInfo() {
        Logger.e("loadAppInfo", "loadAppInfo\t" + LauncherManager.getInstance().getAppInfo().size());
        if (LauncherManager.getInstance().getAppInfo() != null) {
            Iterator<Map.Entry<String, ManagementInfo>> iterator = LauncherManager.getInstance().getAppInfo().entrySet().iterator();

            List<ManagementInfo> timeConfigs = new ArrayList<>();
            while (iterator.hasNext()) {
                Map.Entry<String, ManagementInfo> entry = iterator.next();
                timeConfigs.add(entry.getValue());
            }
            timeAdapter.setManagementInfos(timeConfigs);
            timeAdapter.notifyDataSetChanged();
        }

    }
}
