package com.mobile.mobileinfo.fragment;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.mobile.mobilehardware.wifilist.WifiHelper;
import com.mobile.mobilehardware.wifilist.WifiScanListener;
import com.mobile.mobileinfo.R;
import com.mobile.mobileinfo.adapter.MobListAdapter;
import com.mobile.mobileinfo.data.Param;
import com.mobile.mobileinfo.util.StringUtil;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import static android.content.Context.CLIPBOARD_SERVICE;

public class WifiListFragment extends Fragment {


    private SwipeRefreshLayout mSwipeRefreshLayout;
    private ListView mListView;
    private MobListAdapter adapter;
    private TextView textView;
    public static WifiListFragment newInstance() {
        Bundle args = new Bundle();
        WifiListFragment fragment = new WifiListFragment();
        fragment.setArguments(args);
        return fragment;
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_app, container, false);
        mListView = view.findViewById(R.id.lv_mob);
        mSwipeRefreshLayout = view.findViewById(R.id.spl_mob);
        textView = view.findViewById(R.id.fragment_app_tv);
        textView.setText("Current phone wifiList information");
        onSwipeRefreshLayout();
        adapter = new MobListAdapter(getActivity());
        mListView.setAdapter(adapter);
        mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                try {
                    ClipData clipData = ClipData.newPlainText("Label", (String) adapter.getParam(position).getKey() + "\n" + ((adapter.getParam(position).getValue() instanceof String) ? (String) adapter.getParam(position).getValue() : ""));
                    ((ClipboardManager) getContext().getSystemService(CLIPBOARD_SERVICE)).setPrimaryClip(clipData);
                    Toast.makeText(getContext(), "copy success", Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    e.printStackTrace();

                }
                return true;
            }
        });

        return view;
    }

    private void onSwipeRefreshLayout() {
        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                getParam();
            }
        });
        mSwipeRefreshLayout.post(new Runnable() {
            @Override
            public void run() {
                mSwipeRefreshLayout.setRefreshing(true);
                getParam();

            }
        });
        mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_light,
                android.R.color.holo_red_light,
                android.R.color.holo_orange_light,
                android.R.color.holo_green_light);
    }


    private void getParam() {
        WifiHelper.wifiList(new WifiScanListener() {
            @Override
            public void onResult(JSONObject jsonObject) {
                adapter.addAll(getListParam(jsonObject));
                mSwipeRefreshLayout.setRefreshing(false);
            }
        });
    }


    public List<Param> getListParam(String key, Object value) {
        List<Param> list = new ArrayList<>();
        Param param = new Param();
        param.setValue(value + "");
        param.setKey(key);
        list.add(param);
        return list;
    }

    public List<Param> getListParam(JSONObject jsonObject) {
        List<Param> list = new ArrayList<>();
        try {
            Iterator iterator = jsonObject.keys();
            while (iterator.hasNext()) {
                Param param = new Param();
                String key = (String) iterator.next();
                param.setKey(key);
                if (jsonObject.get(key) instanceof Drawable) {
                    param.setValue(jsonObject.get(key));
                } else {
                    param.setValue(StringUtil.formatString(jsonObject.get(key).toString()));
                }
                list.add(param);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public List<Param> getListParam(JSONArray jsonArray) {
        List<Param> list = new ArrayList<>();
        try {
            for (int i = 0; i < jsonArray.length(); i++) {
                Param param = new Param();
                JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                if (jsonObject.has("isSystem")) {
                    if (!jsonObject.getBoolean("isSystem")) {
                        param.setValue(jsonObject.get("icon"));
                        jsonObject.remove("icon");
                        String key = StringUtil.formatString(jsonObject.toString());
                        param.setKey(key);
                        list.add(param);
                    }
                } else {
                    param.setKey(i + 1 + "");
                    String value = StringUtil.formatString(jsonObject.toString());
                    param.setValue(value);
                    list.add(param);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

}