package com.mm.android.deviceaddmodule.p_softap;

import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.mm.android.deviceaddmodule.R;
import com.mm.android.deviceaddmodule.base.BaseTipFragment;
import com.mm.android.deviceaddmodule.contract.BaseSoftApTipConstract;
import com.mm.android.deviceaddmodule.helper.DeviceAddHelper;
import com.mm.android.deviceaddmodule.helper.DeviceAddImageLoaderHelper;
import com.mm.android.deviceaddmodule.helper.PageNavigationHelper;
import com.mm.android.deviceaddmodule.mobilecommon.base.DefaultPermissionListener;
import com.mm.android.deviceaddmodule.mobilecommon.common.PermissionHelper;
import com.mm.android.deviceaddmodule.mobilecommon.dialog.LCAlertDialog;
import com.mm.android.deviceaddmodule.mobilecommon.entity.deviceadd.DeviceAddInfo;
import com.mm.android.deviceaddmodule.mobilecommon.location.FuseLocationUtil;
import com.mm.android.deviceaddmodule.mobilecommon.utils.UIUtils;
import com.mm.android.deviceaddmodule.model.DeviceAddModel;
import com.nostra13.universalimageloader.core.ImageLoader;
/**
 * 软AP添加引导提示页基类
 */
public abstract class BaseTipSoftApFragment extends BaseTipFragment implements BaseSoftApTipConstract.View {
    BaseSoftApTipConstract.Presenter mPresenter;

    protected abstract void gotoNextSoftApTipPage();

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        DeviceAddInfo deviceAddInfo = DeviceAddModel.newInstance().getDeviceInfoCache();
        if (deviceAddInfo.getConfigMode().contains(DeviceAddInfo.ConfigMode.LAN.name())) {
            DeviceAddHelper.updateTile(DeviceAddHelper.TitleMode.MORE2);
        } else {
            DeviceAddHelper.updateTile(DeviceAddHelper.TitleMode.MORE);
        }
    }

    @Override
    protected void nextAction() {
        if(mPresenter.isLastTipPage()){
            mPresenter.verifyWifiOrLocationPermission();
        } else {
            gotoNextSoftApTipPage();
        }
    }

    @Override
    protected void helpAction() {
        PageNavigationHelper.gotoErrorTipPage(this, DeviceAddHelper.ErrorCode.COMMON_ERROR_NOT_SUPPORT_RESET);
    }

    @Override
    protected void init() {
        initView(mView);
        initData();
    }

    protected void initView(View view) {
        super.initView(view);
        RelativeLayout.LayoutParams params= (RelativeLayout.LayoutParams) mTipImg.getLayoutParams();
        params.height= /*RelativeLayout.LayoutParams.WRAP_CONTENT*/UIUtils.dp2px(getContextInfo(), 300);
        params.width=RelativeLayout.LayoutParams.MATCH_PARENT;
        params.setMargins(0,0,0,0);
        mTipImg.setScaleType(ImageView.ScaleType.FIT_CENTER);
    }

    @Override
    public void updateTipImage(String imageUrl) {
        if (!TextUtils.isEmpty(imageUrl))
            ImageLoader.getInstance().displayImage(imageUrl, mTipImg, DeviceAddImageLoaderHelper.getCommonOptions());
    }

    @Override
    public void updateTipTxt(String tipInfo) {
        if (!TextUtils.isEmpty(tipInfo)) {
            mTipTxt.setText(tipInfo);
        } else {
            mTipTxt.setText(R.string.add_device_operation_by_instructions);
        }
    }

    @Override
    public void updateResetTxt(String resetTxt) {
        if (TextUtils.isEmpty(resetTxt)) {
            mHelpTxt.setVisibility(View.GONE);
        } else {
            mHelpTxt.setVisibility(View.VISIBLE);
            mHelpTxt.setText(resetTxt);
        }
    }


    @Override
    public void goErrorTipPage() {
        PageNavigationHelper.gotoErrorTipPage(this, DeviceAddHelper.ErrorCode.SOFTAP_ERROR_CONNECT_HOT_FAILED);
    }

    @Override
    public void gotoSoftApTipConnectWifiPage() {
        PageNavigationHelper.gotoSoftApTipConnectWifiPage(this);
    }

    @Override
    public void applyLocationPermission() {
        if (getActivity() == null) return;
        //1.判断是否该应用有地理位置权限  2.判断是否开启定位服务
        PermissionHelper permissionHelper = new PermissionHelper(this);
        if (permissionHelper.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION)) {
            verifyLocationService();
        } else {
            permissionHelper.requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, new DefaultPermissionListener() {
                @Override
                public void onGranted() {
                    verifyLocationService();
                }

                @Override
                public boolean onDenied() {
                    return false;
                }
            });
        }
    }


    private void verifyLocationService() {
        if (FuseLocationUtil.isGpsEnabled(getActivity())) {
            gotoSoftApTipConnectWifiPage();
        } else {
            showOpenLocationServiceDialog();
        }

    }

    private void showOpenLocationServiceDialog() {
        LCAlertDialog dialog = new LCAlertDialog.Builder(getActivity())
                .setTitle(R.string.add_device_goto_open_location_service)
                .setCancelButton(R.string.common_cancel, null)
                .setConfirmButton(R.string.common_confirm, new LCAlertDialog.OnClickListener() {
                    @Override
                    public void onClick(LCAlertDialog dialog, int which, boolean isChecked) {
                        Intent intent = new Intent();
                        intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        startActivity(intent);
                        dialog.dismiss();
                    }
                }).create();
        dialog.show(getFragmentManager(), null);
    }
}