package com.jiayue.insu.incloud.utils;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
 * 返回json结果记录
 *
 * @author zcl
 * @version 1.0
 * @since 2023/3/28 16:22
 */

public class JsonResultUtil {

    /** 状态码 */
    public static final String CODE_TAG = "code";

    /** 返回内容 */
    public static final String MSG_TAG = "msg";

    /** 返回内容 */
    public static final String DETAIL_TAG = "detail";

    /** 数据对象 */
    public static final String DATA_TAG = "data";

    /**
     * 状态类型
     */
    public enum Type
    {
        /** 成功 */
        success("1","success",""),
        /** 忽略 */
        ignore("666","ignore",""),
        /** 警告 */
        warn("301","warn",""),
        /** 失败 */
        failure("0","failure",""),
        /** 错误 */
        error("-1","error","");

        private final String value;
        private final String msg;
        private final String detail;

        Type(String value , String msg ,String detail)
        {
            this.value = value;
            this.msg = msg;
            this.detail = detail;
        }

        public String value()
        {
            return this.value;
        }

        public String msg()
        {
            return this.msg;
        }

        public String detail()
        {
            return this.detail;
        }
    }

    /**
     * 存入code和msg
     *
     * @param type 状态类型
     */
    public static JSONObject jsonResult(Type type)
    {
        JSONObject result = new JSONObject();
        result.set(CODE_TAG,type.value);
        result.set(MSG_TAG,type.msg);
        return result;
    }

    /**
     * 存入code、data
     *
     * @param type 状态类型
     * @param data 数据对象
     */
    public static JSONObject jsonResult(Type type, Object data)
    {
        JSONObject result = new JSONObject();
        result.set(MSG_TAG, type.msg);
        result.set(CODE_TAG, type.value);
        if (data != null) {
            result.set(DATA_TAG, data);
        }
        return result;
    }

    /**
     * 存入code、data
     *
     * @param type 状态类型
     * @param detail 数据对象
     */
    public static JSONObject jsonResult(Type type, String detail)
    {
        JSONObject result = new JSONObject();
        result.set(MSG_TAG, type.msg);
        result.set(CODE_TAG, type.value);
        result.set(DETAIL_TAG, detail);
        return result;
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static JSONObject success()
    {
        return success(null);
    }

    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public static JSONObject success(Object data)
    {
        return jsonResult(Type.success, data);
    }

    /**
     * 返回警告消息
     *
     * @return 警告消息
     */
    public static JSONObject warn()
    {
        return warn(null);
    }

    /**
     * 返回警告消息
     *
     * @param data 数据对象
     * @return 警告消息
     */
    public static JSONObject warn(Object data)
    {
        return jsonResult(Type.warn, data);
    }

    /**
     * 返回错误消息
     *
     * @return
     */
    public static JSONObject error()
    {
        return error(null);
    }

    /**
     * 返回错误消息
     *
     * @param data 数据对象
     * @return 警告消息
     */
    public static JSONObject error(Object data)
    {
        return jsonResult(Type.error,data);
    }

    /**
     * 返回错误消息
     *
     * @return
     */
    public static JSONObject failure()
    {
        return failure(null);
    }

    /**
     * 返回错误消息
     *
     * @param data 数据对象
     * @return 警告消息
     */
    public static JSONObject failure(Object data)
    {
        return jsonResult(Type.failure,data);
    }

    /**
     * 返回错误消息
     *
     * @param detail 错误信息
     * @return 警告消息
     */
    public static JSONObject failure(String detail)
    {
        return jsonResult(Type.failure,detail);
    }
}
