package com.skyversation.poiaddr.util;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.skyversation.poiaddr.entity.AddressV4Result;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/***
 * 接口返回消息封装管理工具
 */

@Slf4j
public class MessageManage {

    private static MessageManage messageManage = new MessageManage();
    private MessageManage(){}
    public static MessageManage getInstance(){
        if(messageManage == null) {
            messageManage = new MessageManage();
        }
        return messageManage;
    }

    public String getResultContent(int code, String content, String message){
        JSONObject json = new JSONObject();
        try {
            json.put("code", code);
            if(content == null || content.equals("")){
                json.put("content", null);
            } else {
                json.put("content", content);
            }
            json.put("message", message);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        log.info(json.toString());
        return json.toString();
    }

    public String getResultContent(int code, AddressV4Result addV4, String message){
        JSONObject json = new JSONObject();
        try {
            json.put("code", code);
            if(addV4 == null){
                json.put("content", null);
            } else {
                JSONObject content = new JSONObject();
                content.put("resultCode", addV4.getResultCode());
                content.put("message", addV4.getMessage());
                content.put("exactResult", addV4.getExactResult());
                content.put("recomResult", addV4.getRecomResult());
                json.put("content", content);
            }
            json.put("message", message);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return JSON.toJSONString(json, SerializerFeature.DisableCircularReferenceDetect);
    }

    public String getResultContent(int code, Object bean, String message){
        JSONObject json = new JSONObject();
        try {
            json.put("code", code);
            if(bean == null){
                json.put("content", null);
            } else {
                json.put("content", JSON.toJSON(bean));
            }
            json.put("message", message);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        log.info(json.toString());
        return json.toString();
    }

    public String getResultContent(int code, List lis, String message){
        JSONObject json = new JSONObject();
        try {
            json.put("code", code);
            json.put("message", message);
            if(lis != null && lis.size() > 0){
                JSONArray data = new JSONArray();
                for(Object obj : lis){
                    data.add(JSON.toJSON(obj));
                }
                json.put("content", data);
            } else {
                json.put("content", null);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
        log.info(json.toString());
        return json.toString();
    }
    public String getResultContent(int code, List lis, String message, Long total){
        JSONObject json = new JSONObject();
        try {
            json.put("code", code);
            json.put("message", message);
            if(total == null || total < 0){
                json.put("total", 0);
            } else {
                json.put("total", total);
            }
            if(lis != null && lis.size() > 0){
                JSONArray data = new JSONArray();
                for(Object obj : lis){
                    data.add(JSON.toJSON(obj));
                }
                json.put("content", data);
            } else {
                json.put("content", "");
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
        log.info(json.toString());
        return json.toString();
    }


}
