/* ==============================================================================
 * 功能描述：CheckFactory  
 * 创 建 者：Garrett
 * 创建日期：2019/6/11 16:26:56
 * ==============================================================================*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using ServiceRevitLib.Mode;
using Autodesk.Revit.DB;
using ServiceRevitLib.Extend;

namespace ServiceRevitLib
{
    /// <summary>
    /// CheckFactory
    /// </summary>
    public class CheckFactory:ResultBase
    {
        public CheckFactory()
        {
            Content=new List<CheckBase>();
        }

      

        #region 序列化的属性

        public List<CheckBase> Content { get; set; }

        public string FloorName { get; set; }

        #endregion

        #region Method
        /// <summary>
        /// 由传入字符串获取检查项
        /// 传入的检查列表使用“,”进行分割
        /// </summary>
        /// <param name="checkItemStrs"></param>
        public void SetCheckItems(string str)
        {
            var checkItemStrs= str.Split(',');
            var nameSpace = typeof(CheckBase).Namespace;
            foreach (string itemStr in checkItemStrs)
            {
                //子类与父类应该使用同一命名空间；如果为Program+BaseClass格式，会出错; 如果出现此情况，请更改方法
                string fullPath = nameSpace + "." + itemStr;
                Assembly tempAsembly = Assembly.GetExecutingAssembly();
                var check = (tempAsembly.CreateInstance(fullPath)) as CheckBase;

                Content.Add(check);
            }
        }

        public void Check(Document doc)
        {
            FloorName = doc.PathName;
            //Document doc = DocumentUtils.GetDocument(path);
            try
            {
                Content.ForEach(t => t.SetDoc(doc));
                Content.ForEach(t => t.Check());
            }
            catch (Exception e)
            {
                ResultMsg = e.Message;
                Result = ResultState.Failure;
            }
            finally
            {
                //doc.CloseExt();
            }
        }

        #endregion

    }
}
