/*-------------------------------------------------------------------------
 * 功能描述：BimJsonUtil
 * 作者：xulisong
 * 创建时间： 2019/6/18 11:23:16
 * 版本号：v1.0
 *  -------------------------------------------------------------------------*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using JBIM;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;

namespace RevitToJBim.JsonConverter
{
    public static class BimJsonUtil
    {
        public static string Serializer(BimDocument document)
        {
            JsonSerializerSettings jsetting = CreateDefaultSettings();
            var bimObjects = document.BimObjects;
            var group = bimObjects.GroupBy(bim => bim.ElementType);
            Dictionary<string, List<BimObject>> dic = new Dictionary<string, List<BimObject>>();
            foreach (var collection in group)
            {
                dic[collection.Key + "s"] = collection.ToList();
            }

            var documentObject = new {MBIName = "PjXXX_001", PlanName = "F1-saga", Elements = dic};
            //var serializer = JsonSerializer.Create(jsetting);
            //var jobject=JObject.FromObject(dic, serializer);
            //jobject.ToString();
            string dataStr =JsonConvert.SerializeObject(documentObject, jsetting);
            return dataStr;
        }

        private static JsonSerializerSettings CreateDefaultSettings()
        {
            JsonSerializerSettings jsetting = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore };
            jsetting.Converters.Add(new BimIdConverter());
            //mxg 显示x:,y:,z:格式的
            //jsetting.Converters.Add(new XYZConverter());
            jsetting.Converters.Add(new StringEnumConverter());
            jsetting.Converters.Add(new ParameterConverter());
            return jsetting;
        }
        private static DocumentDto ConverToDto(BimDocument document)
        {
            DocumentDto dto = new DocumentDto();
            var bimObjects = document.BimObjects;
            var group = bimObjects.GroupBy(bim => bim.ElementType);
            Dictionary<string, List<BimObject>> dic = new Dictionary<string, List<BimObject>>();
            foreach (var collection in group)
            {
                dic[collection.Key + "s"] = collection.ToList();
            }

            dto.MBIName = "PjXXX_001";//待读取
            dto.PlanName = "F1-saga";
            dto.Elements = dic;
            return dto;
        }
    }
    /// <summary>
    /// 项目传输数据结构
    /// </summary>
    public class DocumentDto
    {
        public string MBIName { get; set; }
        public string PlanName { get; set; }
        public Dictionary<string, List<BimObject>> Elements { get; set; }
    }
}
