package com.dgtly.common.core.domain;

import java.lang.reflect.InvocationTargetException;
import java.util.*;

import com.dgtly.common.utils.MapBeanUtil;

/**
 * 操作消息提醒
 * 
 * @author ruoyi
 */
public class AjaxResult
{




    private static final long serialVersionUID = 1L;



    private Integer code;
    private String msg;
    private Map<String,Object> data = new HashMap<>();
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Map<String, Object> getData() {
        return data;
    }
    public void setData(Map<String, Object> data) {
        this.data = data;
    }

    public AjaxResult()
    {
    }
    /**
     * 初始化一个新创建的 AjaxResult 对象，使其表示一个空消息。
     */
    public AjaxResult(int code,String msg)
    {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     * 
     * @param type 状态类型
     */
    public AjaxResult(ResultType type)
    {
        this.code =type.value();
        this.msg = type.msg();
    }
    /**
     * 将数据按照键值对的形式放入data中
     * @return
             */
    public AjaxResult set(ResultType t) {
        this.code = t.value();
        this.msg = t.msg();
        return this;
    }
    /**
     * 将实体中的属性放入data中
     * @param data
     * @return
     * @throws IllegalAccessException
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     */
    public AjaxResult parseBean(Object data) {
        if(data!=null){
            if(Collection.class.isAssignableFrom(data.getClass())){
                throw new RuntimeException("parseBean不能导入list类型实体");
            }else{
                if(Map.class.isAssignableFrom(data.getClass())){
                    this.data.putAll((Map)data);
                }else{
                    //将实体转换为map对象，并将其全部字段放入data中。
                    this.data.putAll(MapBeanUtil.object2Map(data));
                }

            }
        }

        return this;
    }

    /**
     * 将数据按照键值对的形式放入data中
     * @param key
     * @param value
     * @return
     */
    public AjaxResult putKV(String key,Object value) {
        this.data.put(key,value);
        return this;
    }

    /**
     * 返回成功消息
     * 
     * @return 成功消息
     */
    public static AjaxResult success()
    {
        return  new AjaxResult(ResultType.SUCCESS);
    }
    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static AjaxResult success(String msg)
    {
        AjaxResult  a = new AjaxResult(ResultType.SUCCESS);
        a.msg=msg;
        return a;
    }
    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static AjaxResult success(Object data)  {
        AjaxResult  a = new AjaxResult(ResultType.SUCCESS);
        a.parseBean(data);
        return a;
    }
    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static AjaxResult success(String msg,Object data) {
        AjaxResult  a = new AjaxResult(ResultType.SUCCESS);
        a.msg=msg;
        a.parseBean(data);
        return a;
    }

    /**
     * 返回错误消息
     * 
     * @return
     */
    public static AjaxResult error()
    {
        return new AjaxResult(ResultType.ERROR);
    }
    /**
     * 返回错误消息
     *
     * @return
     */
    public static AjaxResult error(ResultType t)
    {
        return new AjaxResult(t);
    }
    /**
     * 返回错误消息
     *
     * @return
     */
    public static AjaxResult error(String msg)
    {
        AjaxResult a =new AjaxResult(ResultType.ERROR);
        a.msg = msg;
        return a;
    }
    /**
     * 返回错误消息
     *
     * @return
     */
    public static AjaxResult error(ResultType t,Object data) {
        return new AjaxResult(t).parseBean(data);
    }
    /**
     * 返回错误消息
     *
     * @return
     */
    public static AjaxResult error(int code,String msg)
    {
        return new AjaxResult(code,msg);
    }

    /**
     * 返回错误消息
     *
     * @return
     */
    public static AjaxResult error(int code,String msg,Object data){
        return new AjaxResult(code,msg).parseBean(data);
    }






}
