package com.miraclegarden.smsmessage.Activity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.PermissionInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;

import com.miraclegarden.library.app.MiracleGardenActivity;
import com.miraclegarden.smsmessage.ActionConfirmDialog;
import com.miraclegarden.smsmessage.App;
import com.miraclegarden.smsmessage.AppInfo;
import com.miraclegarden.smsmessage.AppListUtil;
import com.miraclegarden.smsmessage.DeleteConfirmDialog;
import com.miraclegarden.smsmessage.MessageInfo;
import com.miraclegarden.smsmessage.R;
import com.miraclegarden.smsmessage.comm.CommonAdapter;
import com.miraclegarden.smsmessage.comm.ViewHolder;
import com.miraclegarden.smsmessage.databinding.ActivityMainBinding;
import com.miraclegarden.smsmessage.databinding.ActivitySettingBinding;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class SettingActivity extends MiracleGardenActivity<ActivitySettingBinding> {
    public static SharedPreferences sp;
    private static final String TAG = "SettingActivity";
    private ArrayList<MessageInfo> appList = new ArrayList<>();
    CommonAdapter userAdapter;
    boolean is_list = false;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sp = getSharedPreferences("server", MODE_PRIVATE);
        initData();
        initList();

        is_list = getIntent().getBooleanExtra("is_list",false);
        if(!is_list){
            binding.setPostLy.setVisibility(View.VISIBLE);
            binding.titleTv.setText("设置");
        }else{
            binding.titleTv.setText("监听App列表");
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        initChangeList();
    }

    private void initChangeList() {
        List<MessageInfo> appList1 = App.getNotiList(SettingActivity.this);
        if(appList1 == null){
            appList = new ArrayList<>();
        }else{
            appList = (ArrayList<MessageInfo>) appList1;
        }
        userAdapter.setDates(appList);
        if(appList.size()>0){
            binding.recyclerview.setVisibility(View.VISIBLE);
            binding.nodataIv.setVisibility(View.GONE);
        }else{
            binding.recyclerview.setVisibility(View.GONE);
            binding.nodataIv.setVisibility(View.VISIBLE);
        }
    }

    private void initData() {
        binding.host.setText(sp.getString("host", "https://www.judy88.xin/api/bills/app-upload"));
        binding.addBt.setOnClickListener(view -> startActivity(new Intent(SettingActivity.this,AppListActivity.class)));
        binding.backIv.setOnClickListener(view -> finish());

        binding.yes.setOnClickListener(v -> {
            if (sp == null) {
                return;
            }
            if (binding.host.getText().toString().length() == 0) {
                Toast.makeText(this, "服务器和添加参数不能为空", Toast.LENGTH_SHORT).show();
                return;
            }

            if (!binding.host.getText().toString().startsWith("http")) {
                Toast.makeText(this, "服务器地址错误", Toast.LENGTH_SHORT).show();
                return;
            }
            hideKeyboard();
            AppInfo appInfo = AppListUtil.getAppByPackageName(SettingActivity.this,"com.miraclegarden.smsmessage");
            appInfo.setCode("111");
            appInfo.setName("测试");
            appInfo.setRemark("测试更换接口");
            MessageInfo messageInfo  = MessageInfo.AppInfoToMessageInfo(appInfo);
            Submit(messageInfo,"测试更换接口","测试更换接口");

        });

    }



    public MediaType JSON = MediaType.parse("application/json; charset=utf-8");

    public void Submit(MessageInfo messageInfo, String title, String context) {
        OkHttpClient client = new OkHttpClient();
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("name", messageInfo.getName());
            jsonObject.put("code", messageInfo.getCode());
            jsonObject.put("remark", messageInfo.getRemark());
            jsonObject.put("appName", messageInfo.getAppName());
            jsonObject.put("packageName", messageInfo.getPackageName());
            JSONObject jsonObject1 = new JSONObject();
            jsonObject1.put("title", title);
            jsonObject1.put("context", context);
            jsonObject.put("data", jsonObject1);
            String json = jsonObject.toString();
            RequestBody body = RequestBody.create(json, JSON);
            // 构建请求
            Request request = new Request.Builder()
                    .url(binding.host.getText().toString())
                    .post(body)
                    .build();
            Log.i("地址是啥","地址是啥1111："+binding.host.getText().toString());
            Log.i("地址是啥","地址是啥2222："+json);

            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(@NonNull Call call, @NonNull IOException e) {
//                    NotificationActivity.sendMessage("提交失败:" + e);
//                    Toast.makeText(SettingActivity.this,"接口地址访问异常",Toast.LENGTH_SHORT).show();
                    sendMessage("接口地址访问异常");

                }

                @Override
                public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                    String str = response.body().string();
                    if (response.isSuccessful()) {
                        Log.i("地址是啥","地址是啥："+str);
                        //        {"ok":true,"received":true}
                        toSaveAddress();
                        return;
                    }
                    Log.i("地址是啥","地址是啥11："+str);
                    sendMessage("接口地址访问异常");
                }
            });
        } catch (JSONException e) {
            throw new RuntimeException(e);
        }
    }


    private void hideKeyboard() {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        if (imm != null && binding.host.getWindowToken() != null) {
            imm.hideSoftInputFromWindow(binding.host.getWindowToken(), 0);
        }
    }

    private   Handler handler = new Handler(Looper.myLooper()) {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            String str = (String) msg.obj;
            if (str != null) {
                Toast.makeText(SettingActivity.this,str,Toast.LENGTH_SHORT).show();
            }
        }
    };


    public  void sendMessage(String str) {
        Message message = new Message();
        message.obj = str;
        handler.sendMessage(message);
    }
    private void toSaveAddress() {

        SharedPreferences.Editor edit = sp.edit();
        edit.putString("host", binding.host.getText().toString());
        edit.apply();
        sendMessage( "服务器地址修改成功:" );
    }


    private void initList() {
        binding.recyclerview.setLayoutManager(new LinearLayoutManager(this));
        userAdapter = new CommonAdapter<>(SettingActivity.this, R.layout.item_user, appList) {
            @Override
            public void convert(ViewHolder holder, MessageInfo info, int index) {
                AppInfo appInfo = AppListUtil.getAppByPackageName(SettingActivity.this,info.getPackageName());
                ImageView delete_img = holder.getView(R.id.delete_img);
                delete_img.setVisibility(View.VISIBLE);
                delete_img.setOnClickListener(view -> {
                    DeleteConfirmDialog deleteConfirmDialog = new DeleteConfirmDialog(SettingActivity.this,info);
                    deleteConfirmDialog.setOnToActionListener(() -> {
                        App.deleteNotiBean(SettingActivity.this,info);
                        initChangeList();
                    });
                    deleteConfirmDialog.show();

                });
                if(appInfo!=null){
                    ((ImageView) holder.getView(R.id.iv_icon)).setImageDrawable(appInfo.getIcon());
                }else{
                    ((ImageView) holder.getView(R.id.iv_icon)).setImageResource(R.mipmap.app_logo);
                }
                holder.setText(R.id.tv_appname, info.getAppName());
                holder.setText(R.id.tv_package, info.getPackageName());

                if (!TextUtils.isEmpty(info.getName())) {
                    holder.setText(R.id.tv_name, info.getName()+"/");
                }else{
                    holder.setText(R.id.tv_name, "--/");
                }
                if (!TextUtils.isEmpty(info.getCode())) {
                    holder.setText(R.id.tv_code, info.getCode()+"/");
                }else{
                    holder.setText(R.id.tv_code, "--/");
                }
                if (!TextUtils.isEmpty(info.getRemark())) {
                    holder.setText(R.id.tv_remark, info.getRemark());
                }else{
                    holder.setText(R.id.tv_remark, "--");
                }

            }
        };

        binding.recyclerview.setAdapter(userAdapter);
    }



}
