package com.zwh.mvparms.eyepetizer.mvp.ui.activity;


import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.design.widget.AppBarLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import com.apt.TRouter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.DataHelper;
import com.jess.arms.utils.DeviceUtils;
import com.jess.arms.utils.PermissionUtil;
import com.jess.arms.utils.SharedPreferencesUtils;
import com.jess.arms.utils.UiUtils;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.tencent.bugly.beta.Beta;
import com.zwh.annotation.apt.Router;
import com.zwh.mvparms.eyepetizer.R;
import com.zwh.mvparms.eyepetizer.app.EventBusTags;
import com.zwh.mvparms.eyepetizer.app.constants.Constants;
import com.zwh.mvparms.eyepetizer.mvp.model.entity.DataExtra;

import org.simple.eventbus.EventBus;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import cn.bmob.v3.BmobUser;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;

@Router(Constants.SETTINGS)
public class SettingsActivity extends BaseActivity {
    @BindView(R.id.toolbar)
    Toolbar mToolbar;
    @BindView(R.id.appbar)
    AppBarLayout appbar;
    @BindView(R.id.switch_flow)
    Switch switchFlow;
    @BindView(R.id.ctl_flow)
    ConstraintLayout ctlFlow;
    @BindView(R.id.tv_wifi_open)
    TextView tvWifiOpen;
    @BindView(R.id.switch_wifi)
    Switch switchWifi;
    @BindView(R.id.ctl_wifi)
    ConstraintLayout ctlWifi;
    @BindView(R.id.tv_splash_open)
    TextView tvSplashOpen;
    @BindView(R.id.tv_version_name)
    TextView tvVersionName;
    @BindView(R.id.switch_splash)
    Switch switchSplash;
    @BindView(R.id.ctl_splash)
    ConstraintLayout ctlSplash;
    @BindView(R.id.ctl_clear)
    ConstraintLayout ctlClear;
    @BindView(R.id.ctl_author)
    ConstraintLayout ctlAuthor;
    @BindView(R.id.ctl_rate)
    ConstraintLayout ctlRate;
    @BindView(R.id.ctl_open_source)
    ConstraintLayout ctlOpenSource;
    @BindView(R.id.ctl_update)
    ConstraintLayout ctlUpdate;
    @BindView(R.id.ctl_logout)
    ConstraintLayout ctlLogout;
    @BindView(R.id.tv_flutter_open)
    TextView mTvFlutterOpen;
    @BindView(R.id.switch_flutter)
    Switch mSwitchFlutter;
    @BindView(R.id.ctl_flutter)
    ConstraintLayout mCtlFlutter;

    private RxErrorHandler mErrorHandler;
    private RxPermissions mRxPermissions;

    @Override
    public void setupActivityComponent(AppComponent appComponent) {
        mRxPermissions = new RxPermissions(this);
        mErrorHandler = appComponent.rxErrorHandler();
    }

    @Override
    public int initView(Bundle savedInstanceState) {
        return R.layout.activity_settings;
    }

    @Override
    public void initData(Bundle savedInstanceState) {
        initToolBar();
        switchFlow.setChecked((Boolean) SharedPreferencesUtils.getParam(this, Constants.SETTING_FLOW, true));
        switchWifi.setChecked((Boolean) SharedPreferencesUtils.getParam(this, Constants.SETTING_WIFI, true));
        boolean splashchecked = (Boolean) SharedPreferencesUtils.getParam(this, Constants.SETTING_SPLASH, false);
        boolean flutterchecked = (Boolean) SharedPreferencesUtils.getParam(this, Constants.SETTING_FLUTTER, false);
        switchSplash.setChecked(splashchecked);
        tvSplashOpen.setText(splashchecked?"开":"关");
        mSwitchFlutter.setChecked(flutterchecked);
        mTvFlutterOpen.setText(flutterchecked?"开":"关");
        tvVersionName.setText("当前版本" + DeviceUtils.getVersionName(this));
        if (BmobUser.getCurrentUser() == null) {
            ctlLogout.setVisibility(View.GONE);
        }
    }

    @OnClick({R.id.ctl_flow, R.id.ctl_wifi, R.id.ctl_splash, R.id.ctl_flutter,R.id.ctl_clear, R.id.ctl_author, R.id.ctl_rate, R.id.ctl_open_source, R.id.ctl_update, R.id.ctl_logout})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.ctl_flow:
                if (switchFlow.isChecked()) {
                    switchFlow.setChecked(false);
                } else {
                    switchFlow.setChecked(true);
                }
                SharedPreferencesUtils.setParam(this, Constants.SETTING_FLOW, switchFlow.isChecked());
                break;
            case R.id.ctl_wifi:
                if (switchWifi.isChecked()) {
                    switchWifi.setChecked(false);
                    tvWifiOpen.setText("关");
                } else {
                    switchWifi.setChecked(true);
                    tvWifiOpen.setText("开");
                }
                SharedPreferencesUtils.setParam(this, Constants.SETTING_WIFI, switchWifi.isChecked());
                break;
            case R.id.ctl_splash:
                if (switchSplash.isChecked()) {
                    switchSplash.setChecked(false);
                    tvSplashOpen.setText("关");
                } else {
                    switchSplash.setChecked(true);
                    tvSplashOpen.setText("开");
                }
                SharedPreferencesUtils.setParam(this, Constants.SETTING_SPLASH, switchSplash.isChecked());
                break;
            case R.id.ctl_flutter:
                if (mSwitchFlutter.isChecked()) {
                    mSwitchFlutter.setChecked(false);
                    mTvFlutterOpen.setText("关");
                } else {
                    mSwitchFlutter.setChecked(true);
                    mTvFlutterOpen.setText("开");
                }
                SharedPreferencesUtils.setParam(this, Constants.SETTING_FLUTTER, mSwitchFlutter.isChecked());
                break;
            case R.id.ctl_clear:
                PermissionUtil.externalStorage(new PermissionUtil.RequestPermission() {
                    @Override
                    public void onRequestPermissionSuccess() {
                        if (!DataHelper.findFile(getExternalCacheDir())) {
                            UiUtils.makeText(SettingsActivity.this, "暂无缓存");
                            return;
                        }
                        DataHelper.deleteDir(getCacheDir());
                        DataHelper.deleteDir(getExternalCacheDir());
                        UiUtils.makeText(SettingsActivity.this, "缓存已删除");
                    }

                    @Override
                    public void onRequestPermissionFailure(List<String> permissions) {
                        UiUtils.snackbarText("Request permissons failure");
                    }

                    @Override
                    public void onRequestPermissionFailureWithAskNeverAgain(List<String> permissions) {
                        UiUtils.snackbarText("Request permissons failure");
                    }

                }, mRxPermissions, mErrorHandler);
                break;
            case R.id.ctl_author:
                TRouter.go(Constants.AUTHOR, new DataExtra(Constants.AUTHOR_TYPE, 0).build());
                break;
            case R.id.ctl_rate:
                try {
                    Uri uri = Uri.parse("market://details?id=" + getPackageName());
                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                } catch (Exception e) {
                    Toast.makeText(this, "您的手机没有安装Android应用市场", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }
                break;
            case R.id.ctl_open_source:
                break;
            case R.id.ctl_update:
                Beta.checkUpgrade();
                break;
            case R.id.ctl_logout:
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.setMessage("确定不是手滑了吗?").setPositiveButton("确定",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                EventBus.getDefault().post("succeed", EventBusTags.SETTING_ACTIVITY_LOG_OUT);
                                BmobUser.logOut();
                                ctlLogout.setVisibility(View.GONE);
                            }
                        }).setNegativeButton("手滑了", null);
                alert.create();
                alert.show();
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mRxPermissions = null;
    }

    @Override
    protected boolean isDisplayHomeAsUpEnabled() {
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // TODO: add setContentView(...) invocation
        ButterKnife.bind(this);
    }
}