using APT.Infrastructure.Core;
using APT.MS.Domain.Entities.HM;
using APT.MS.Domain.Entities.SK;
using APT.MS.Domain.Enums;
using APT.Utility;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Linq;
namespace APT.SK.WebApi.Controllers.Api
{
    /// 
    ///  辨识区域
    /// 
    [Route("api/SK/SKRiskArea")]
    public partial class RiskAreaController : AuthorizeTreeApiController
    {
        /// 
        /// 更新或新增数据
        /// 
        /// 对象实体
        /// 
        [HttpPost, Route("FullUpdate")]
        public JsonActionResult FullUpdate([FromBody] T_SK_RISK_AREA entity)
        {
            //return WitUpdate(entity);
            return SafeExecute(() =>
            {
                var videos = entity.Nav_Videos;
                entity.Nav_Videos = null;
                if (videos.Count > 0)
                {
                    foreach (var item in videos)
                    {
                        item.Nav_Viedo = null;
                        item.Nav_Area = null;
                    }
                }
                this.UnifiedCommit(() =>
                {
                    if (videos != null && videos.Count > 0)
                    {
                        BantchSaveEntityNoCommit(videos);
                    }
                    TreeUpdateEntity(entity);
                });
                return true;
            });
        }
        /// 
        /// 区域最小单元
        /// 
        /// 
        /// 
        [HttpPost, Route("GetAreaList")]
        public PagedActionResult GetAreaList([FromBody] KeywordPageFilter pageFilter)
        {
            return SafeGetPagedData((result) =>
            {
                var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId.ToString();
                List ids = new List();
                Expression> expression = e => !e.IS_DELETED;
                var areas = this.GetEntities(expression, new BaseFilter(pageFilter.OrgId)).ToList();
                if (areas != null & areas.Any())
                {
                    var parentIds = areas.Where(m => m.PARENT_ID != null).Select(t => t.PARENT_ID).ToList();
                    foreach (var item in areas)
                    {
                        if (!parentIds.Contains(item.ID))
                        {
                            ids.Add(item.ID);
                        }
                    }
                }
                Expression> expressionArea = e => !e.IS_DELETED;
                if (ids != null && ids.Any())
                {
                    expressionArea = expressionArea.And(t => ids.Contains(t.ID));
                }
                var info = this.GetOrderPageEntities(expressionArea, pageFilter, null);
                result.TotalCount = info.TotalCount;
                result.Data = info.Data;
                result.IsSuccessful = info.IsSuccessful;
            });
        }
    }
}