using Aitex.Core.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MECF.Framework.Common.Net
{
    public class NetResult
    {
        /// 
        /// 指示本次访问是否成功
        /// 
        public bool IsSuccess { get; set; }
        /// 
        /// 具体的错误描述
        /// 
        public string Message { get; set; } 
        /// 
        /// 具体的错误代码
        /// 
        public int ErrorCode { get; set; } = 10000;
        /// 
        /// 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
        /// 
        /// 目标数据类型
        /// 之前的结果对象
        /// 带默认泛型对象的失败结果类
        public static NetResult CreateFailedResult(int errorCode, string msg)
        {
            return new NetResult()
            {
                IsSuccess = false,
                ErrorCode = errorCode,
                Message = msg
            };
        }
        /// 
        /// 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
        /// 
        /// 目标数据类型
        /// 之前的结果对象
        /// 带默认泛型对象的失败结果类
        public static NetResult CreateFailedResult(int errorCode, string msg)
        {
            return new NetResult()
            {
                IsSuccess = false,
                ErrorCode = errorCode,
                Message = msg
            };
        }
        /// 
        /// 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
        /// 
        /// 目标数据类型
        /// 之前的结果对象
        /// 带默认泛型对象的失败结果类
        public static NetResult CreateFailedResult(NetErrorCode errorCode)
        {
            return new NetResult()
            {
                IsSuccess = false,
                ErrorCode = (int)errorCode,
                Message = EnumUtil.GetEnumDescription(errorCode)
            };
        }
        /// 
        /// 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
        /// 
        /// 目标数据类型
        /// 之前的结果对象
        /// 带默认泛型对象的失败结果类
        public static NetResult CreateFailedResult(int errorCode,string msg,T data)
        {
            return new NetResult()
            {
                IsSuccess = false,
                ErrorCode = errorCode,
                Message = msg,
                Data = data
            };
        }
        /// 
        /// 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
        /// 
        /// 目标数据类型
        /// 之前的结果对象
        /// 带默认泛型对象的失败结果类
        public static NetResult CreateFailedResult(NetErrorCode errorCode,  T data)
        {
            return new NetResult()
            {
                IsSuccess = false,
                ErrorCode = (int)errorCode,
                Message = EnumUtil.GetEnumDescription(errorCode),
                Data = data
            };
        }
        /// 
        /// 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
        /// 
        /// 目标数据类型
        /// 之前的结果对象
        /// 带默认泛型对象的失败结果类
        public static NetResult CreateFailedResult(NetErrorCode errorCode)
        {
            return new NetResult()
            {
                IsSuccess = false,
                ErrorCode = (int)errorCode,
                Message = EnumUtil.GetEnumDescription(errorCode),
            };
        }
        /// 
        /// 创建并返回一个成功的结果对象
        /// 
        /// 成功的结果对象
        public static NetResult CreateSuccessResult()
        {
            return new NetResult()
            {
                IsSuccess = true,
                ErrorCode = 0,
                Message = ""
            };
        }
        /// 
        /// 创建并返回一个成功的结果对象,并带有一个参数对象
        /// 
        /// 参数类型
        /// 类型的值对象
        /// 成功的结果对象
        public static NetResult CreateSuccessResult(T value)
        {
            return new NetResult()
            {
                IsSuccess = true,
                ErrorCode = 0,
                Message = "",
                Data = value
            };
        }
    }
    public class NetResult : NetResult
    {
        public T Data { get; set; }
    }
}