package com.example.share2;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.content.Context;
import com.bumptech.glide.Glide;
import com.example.share2.fragment.comment.CommentAdapter;
import com.example.share2.fragment.comment.CommentData;
import com.example.share2.fragment.photo.PhotoData;
import com.example.share2.fragment.photo.Record;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

public class CommentActivity extends AppCompatActivity {

    private Record record;
    private static List<CommentData> commentDataList;
    private static ListView listView;
    private static ImageView imageViewComm;
    private static  TextView hide_down ;
    private static EditText comEdit;
    private static Button bsend;
    private static CommentAdapter commentAdapter;
    private LinearLayout rl_enroll;
    private RelativeLayout rl_comment;
    SharedPreferences sp;

    private static final Handler mHandler = new Handler(Looper.getMainLooper()){
        public void handleMessage(Message msg){
            ResponseBody<PhotoData<List<CommentData>>> photoDataResponseBody;
            switch (msg.what) {
                case 1:
                    photoDataResponseBody = (ResponseBody<PhotoData<List<CommentData>>>) msg.obj;
                    PhotoData<List<CommentData>> commentData = photoDataResponseBody.getData();
                    if (commentData == null)//防止崩溃
                    {
                        Log.d("失败哦","ssss");
                        break;
                    }
                    List<CommentData> l;
                    l = commentData.getRecords();

                    for(CommentData commentData1:l)
                       commentAdapter.add(commentData1);
                    commentAdapter.notifyDataSetChanged();
                    break;
                default:
                    break;
            }
        }
    };






    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_comment);
        this.getSupportActionBar().hide();

        sp = getSharedPreferences("config", Context.MODE_PRIVATE);


         record = (Record) getIntent().getSerializableExtra("record");
         commentDataList = new ArrayList<CommentData>();
         CommentData c = new CommentData();
         c.setAuthor(record.getUsername());
         c.setTitle(record.getTitle());
         c.setUrl(record.getImageUrlList().get(0));
         commentDataList.add(c);
         commentAdapter = new CommentAdapter(this,R.layout.comment_item,commentDataList);
         listView = findViewById(R.id.lv_comment_list);
         listView.setAdapter(commentAdapter);
         getData();

         hide_down = findViewById(R.id.hide_down);
         comEdit = findViewById(R.id.comment_content);
         bsend = findViewById(R.id.comment_send);
        rl_enroll = (LinearLayout) findViewById(R.id.rl_enroll);
        rl_comment = (RelativeLayout) findViewById(R.id.rl_comment);

        imageViewComm = findViewById(R.id.commentgive);
        imageViewComm.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onClick(View view) {
                InputMethodManager imm = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
                rl_enroll.setVisibility(View.GONE);
                rl_comment.setVisibility(View.VISIBLE);
            }
        });
        hide_down.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                rl_enroll.setVisibility(View.VISIBLE);
                rl_comment.setVisibility(View.GONE);
                InputMethodManager im = (InputMethodManager)getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
               im.hideSoftInputFromWindow(comEdit.getWindowToken(), 0);
            }
        });
        bsend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(comEdit.getText().toString().equals("")){
                    Toast.makeText(CommentActivity.this, "评论不能为空哦！", Toast.LENGTH_SHORT).show();
                }
                else {
                    CommentData c = new CommentData();
                    c.setContent(comEdit.getText().toString());
                    String temp = sp.getString("username","");
                    c.setUserName(temp);
                    commentAdapter.add(c);
                    commentAdapter.notifyDataSetChanged();
                    pushData(comEdit.getText().toString());
                    InputMethodManager im = (InputMethodManager)getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    im.hideSoftInputFromWindow(comEdit.getWindowToken(), 0);

                }
            }
        });

    }




    private void getData(){
        ConnectServer connectServer = new ConnectServer();
        Map<String,String> addHeader = new HashMap<>();
        addHeader.put("Content-Type","application/json");
        Headers headers = connectServer.getHeaders(addHeader);


        HashMap bodyParams = new HashMap<>();

        bodyParams.put("shareId",record.getId());

        String url = Constants.SERVER_URL+Constants.USER_COMMENT_FIRST+connectServer.getBodyParams(bodyParams);

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(url)
                .headers(headers).get().build();

        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("获取一级评论失败","sssss");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                    final String Rbody = response.body().string();
                    Gson gson = new Gson();
                    Type jsonType = new TypeToken<ResponseBody<PhotoData<List<CommentData>>>>(){}.getType();
                     ResponseBody<PhotoData<List<CommentData>>> dataResponseBody = gson.fromJson(Rbody,jsonType);
                     Message message = new Message();
                     message.what = 1;
                     message.obj = dataResponseBody;
                     mHandler.sendMessage(message);
                Log.d("获取一级评论成功","sssss");
            }
        });
    }

    private void pushData(String commtent){
        ConnectServer connectServer = new ConnectServer();
        Map<String,String> addHeader = new HashMap<>();
        addHeader.put("Content-Type","application/json");
        Headers headers = connectServer.getHeaders(addHeader);

        Map<String,String> bodyParams = new HashMap<>();
        bodyParams.put("shareId",record.getId());
        String userId = sp.getString("id","");
        String userName = sp.getString("username","");
        bodyParams.put("userId",userId);
        bodyParams.put("userName",userName);
        bodyParams.put("content",commtent);
        RequestBody r_body  = connectServer.getJsonBody(bodyParams);
        String url = Constants.SERVER_URL+Constants.USER_COMMENT_FIRST;

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(url)
                .headers(headers).post(r_body).build();

        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("获取一级评论失败","sssss");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String Rbody = response.body().string();
                Gson gson = new Gson();
//                Type jsonType = new TypeToken<ResponseBody<PhotoData<List<CommentData>>>>(){}.getType();
//                ResponseBody<PhotoData<List<CommentData>>> dataResponseBody = gson.fromJson(Rbody,jsonType);
//                Message message = new Message();
//                message.what = 1;
//                message.obj = dataResponseBody;
//                mHandler.sendMessage(message);
//                Log.d("获取一级评论成功","sssss");
            }
        });
    }






}