package com.mm.android.deviceaddmodule.p_softap;

import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Paint;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.mm.android.deviceaddmodule.R;
import com.mm.android.deviceaddmodule.base.BaseDevAddFragment;
import com.mm.android.deviceaddmodule.contract.TipSoftApConnectWifiConstract;
import com.mm.android.deviceaddmodule.helper.DeviceAddHelper;
import com.mm.android.deviceaddmodule.helper.PageNavigationHelper;
import com.mm.android.deviceaddmodule.helper.Utils4AddDevice;
import com.mm.android.deviceaddmodule.mobilecommon.common.LCConfiguration;
import com.mm.android.deviceaddmodule.mobilecommon.entity.deviceadd.DeviceAddInfo;
import com.mm.android.deviceaddmodule.mobilecommon.eventbus.event.CloseTimeFilterEvent;
import com.mm.android.deviceaddmodule.mobilecommon.eventbus.event.NoticeToBackEvent;
import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil;
import com.mm.android.deviceaddmodule.model.DeviceAddModel;
import com.mm.android.deviceaddmodule.presenter.TipSoftApConnectWifiPresenter;
import com.mm.android.deviceaddmodule.services.TimeFilterService;

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

/**
 * 软AP添加引导提示页-自动连接wifi
 */
public class TipSoftApConnectWifiFragment extends BaseDevAddFragment implements TipSoftApConnectWifiConstract.View {
    TipSoftApConnectWifiConstract.Presenter mPresenter;
    TextView mShowTipTv, mWifiNameTv, mWifiPwdTv,mShowTip1Tv;
    TextView mGotoWifiSetting, mAboutWifiPwdTv;
    LinearLayout mWifiPwdLayout;
    ImageView mCopyIv;
    private boolean mIsBack;  //是否需要返回到上一页(主要是应用在长时间未连接热点,点击通知栏需要返回到上一页)

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

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(NoticeToBackEvent event) {
        mIsBack = true;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_tip_soft_ap_connect_wifi, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }

    @Override
    protected void initView(View view) {
        mShowTipTv = view.findViewById(R.id.tv_image_show_tip);
        mShowTipTv.setText(R.string.add_device_wait_to_connect_wifi);
        mShowTip1Tv = view.findViewById(R.id.tv_show_tip);
        mWifiNameTv = view.findViewById(R.id.tv_wifi_name);

        mWifiPwdLayout = view.findViewById(R.id.layout_wifi_pwd);
        mWifiPwdTv = view.findViewById(R.id.tv_wifi_pwd);
        mWifiPwdTv.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//下划线
        mWifiPwdTv.getPaint().setAntiAlias(true);//抗锯齿
        mWifiPwdTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mPresenter.copyWifiPwd();
            }
        });

        mCopyIv = view.findViewById(R.id.iv_copy);
        mCopyIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mPresenter.copyWifiPwd();
            }
        });

        mGotoWifiSetting = (TextView)view.findViewById(R.id.tv_goto_connect);
        mGotoWifiSetting.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //取消之前的定时任务
                EventBus.getDefault().post(new CloseTimeFilterEvent());
                Intent intent = new Intent(getActivity(), TimeFilterService.class);
                intent.putExtra(LCConfiguration.SSID, mPresenter.getHotSSID());
                getActivity().startService(intent);
                //  CommonHelper.gotoWifiSetting(getActivity());
                Intent wifiIntent  = new Intent();
                wifiIntent.setFlags(intent.FLAG_ACTIVITY_NO_HISTORY|intent.FLAG_ACTIVITY_NEW_TASK);
                wifiIntent.setAction("android.net.wifi.PICK_WIFI_NETWORK");
                startActivity(wifiIntent);
            }
        });
        mAboutWifiPwdTv = (TextView)view.findViewById(R.id.tv_about_wifi_pwd);
        mAboutWifiPwdTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PageNavigationHelper.gotoErrorTipPage(TipSoftApConnectWifiFragment.this, DeviceAddHelper.ErrorCode.COMMON_ERROR_ABOUT_WIFI_PWD);
            }
        });
    }

    protected void initData(){
        mPresenter = new TipSoftApConnectWifiPresenter(this);
        mPresenter.connectWifiAction(true);

        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
    public void updateWifiName(String wifiName) {
        mWifiNameTv.setText(wifiName);
    }

    @Override
    public void updateConnectFailedTipText(String wifiName, String wifiPwd, boolean isSupportAddBySc, boolean isManualInput) {
        mGotoWifiSetting.setVisibility(View.VISIBLE);
        mAboutWifiPwdTv.setVisibility(isSupportAddBySc ? View.VISIBLE : View.GONE);
        mShowTipTv.setText(getString(R.string.add_device_connect_wifi_failed));
        mShowTipTv.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,R.drawable.adddevice_icon_help,0);
        mShowTipTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                PageNavigationHelper.gotoErrorTipPage(TipSoftApConnectWifiFragment.this, DeviceAddHelper.ErrorCode.COMMON_ERROR_CONNECT_FAIL);
            }
        });
        mShowTip1Tv.setText(getString(isSupportAddBySc ? R.string.add_device_wait_to_connect_wifi_failed_sc : R.string.add_device_wait_to_connect_wifi_failed, wifiName));
        mWifiPwdLayout.setVisibility(isSupportAddBySc ? View.VISIBLE : View.GONE);
        mWifiPwdTv.setText(wifiPwd);
        mWifiPwdTv.setClickable(!isManualInput);
        mCopyIv.setVisibility(isManualInput ? View.GONE : View.VISIBLE);
    }

    @Override
    protected IntentFilter createBroadCast() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(LCConfiguration.CONNECTIVITY_CHAGET_ACTION);
        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        return filter;
    }

    @Override
    protected void onReceive(Context context, Intent intent) {
        if (isDestoryView())
            return;
        if (LCConfiguration.CONNECTIVITY_CHAGET_ACTION.equals(intent.getAction())
                || WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())
                || WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {
            LogUtil.debugLog("bz", "onReceive");
            final int netWorkState = Utils4AddDevice.getNetWorkState(getContextInfo());
            LogUtil.debugLog("bz", "netWorkState : " + netWorkState);
            mPresenter.dispatchHotConnected();
        }
    }

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

    @Override
    public void onResume() {
        super.onResume();
        if (mIsBack) {
            if (getActivity() == null)
                return;
            getActivity().getSupportFragmentManager().popBackStack();
            mIsBack = false;
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();

        cancelProgressDialog();
        //取消定时任务
        EventBus.getDefault().post(new CloseTimeFilterEvent());
    }
}