/******************************************************************************
  * 文件名称: JsonHelper.cs
 * 文件说明: Json业务的封装，处理JSON串的封装，解析等
 * 当前版本: V1.0
 * 创建日期: 2022-04-14
 *
 * 2020-04-14: 增加 getIrisServiceInparamBaseJson 方法
 * 2020-04-14: 增加 getIrisServiceInparamBaseJson（重载） 方法
 * 2020-04-14: 增加 getIrisExceptionJson 方法
 * 2020-04-14: 增加 parseBusinessJson 方法

 ******************************************************************************/
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DirectoryDownload.Helper
{
    class JsonHelper
    {
       /// <summary>
       /// 获取iris服务的基本JSON串格式(只有一个入参)
       /// </summary>
       /// <param name="code"></param>
       /// <param name="joParam"></param>
       /// <returns></returns>
        public static JObject getIrisServiceInparamBaseJson(string code, JObject joParam)
        {
            try
            {
                dynamic joInparam = new JObject();
                joInparam.code = code;
                dynamic joTmp = new JObject();
                JArray jaParam = new JArray();
                jaParam.Add(joParam);
                joInparam.Add("params", JArray.FromObject(jaParam));
                return joInparam;
            }
            catch (Exception ex)
            {
                return getIrisExceptionJson(-1, "getIrisServiceInparamBaseJson:", ex.Message);
            }
            
            
        }

        /// <summary>
        /// 获取iris服务的基本JSON串格式,有多个入参
        /// </summary>
        /// <param name="code"></param>
        /// <param name="jaParams"></param>
        /// <returns></returns>
        public static JObject getIrisServiceInparamBaseJson(string code, JArray jaParams)
        {
            try
            {
                dynamic joInparam = new JObject();
                joInparam.code = code;
                joInparam.Add("params", JArray.FromObject(jaParams));
                return joInparam;
            }
            catch (Exception ex)
            {
                return getIrisExceptionJson(-1, "getIrisServiceInparamBaseJson:" , ex.Message);
            }
        }


        /// <summary>
        /// 组织异常JSON串
        /// </summary>
        /// <param name="errorCode"></param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        public static JObject getIrisExceptionJson(int errorCode, string eventName,string errorMessage)
        {
            dynamic joRtn = new JObject();
            joRtn.errorCode = -1;
            joRtn.errorMessage = eventName + "提示：" + errorMessage;
            return joRtn;
        }

        /// <summary>
        /// 解析业务JSON串（业务串固定格式为{errorCode = ,errorMessage = ,result ={}}）
        /// </summary>
        /// <param name="json"></param>
        /// <param name="errorMsg"></param>
        /// <returns></returns>
        public static int parseBusinessJson(JObject json,out  string errorMsg)
        {
            try
            {
                errorMsg = "";
                if (json.Property("errorMessage") != null)
                {
                    errorMsg = json["errorMessage"].ToString();
                }
                return int.Parse(json["errorCode"].ToString());
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -1;     
            }
        }

        public static int parseCenterJson(JObject json, out string errorMsg)
        {
            try
            {
                errorMsg = "";
                if (int.Parse(json["infcode"].ToString()) != 0)
                {
                    errorMsg = json["err_msg"].ToString();
                }
                return int.Parse(json["infcode"].ToString());
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -1;
            }
        }

        public static JObject getIrisReturnJson(int errorCode, string errorMessage, JObject joResult)
        {
            try
            {
                dynamic joRtn = new JObject();
                joRtn.errorCode = errorCode;
                joRtn.errorMessage = errorMessage;
                joRtn.Add("result", JObject.FromObject(joResult));
                return joRtn;
            }
            catch (Exception ex)
            {
                return getIrisExceptionJson(-1, "getIrisServiceInparamBaseJson:", ex.Message);
            }
        }

        /// <summary>
        /// 根据JSonPath查找节点值，如果节点不存在则返回空值
        /// </summary>
        /// <param name="jo"></param>
        /// <param name="jsonPath"></param>
        /// <returns></returns>
        public static string getJsonValue(JObject jo, string jsonPath)
        {
            JToken jt = jo.SelectToken("$." + jsonPath);
            if (jt != null)
            {
                return jt.ToString();
            }
            else
            {
                GlobalVariables.writeLog(jsonPath + "属性值为空");
                return "";
            }
        }
    }
}
