using APT.BaseData.Domain.Entities;
using APT.BaseData.Domain.Entities.BD;
using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.IServices.BD;
using APT.BaseData.Domain.IServices.FM;
using APT.Infrastructure.Core;
using APT.Utility;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace APT.BD.WebApi.Controllers.Api
{
    /// 
    ///  国标行业信息
    /// 
    [Route("api/BD/Picture")]
    public partial class PictuerController : AuthorizeApiController
    {
        /// 
        /// 更新
        /// 
        /// 
        /// 
        [HttpPost, Route("FullUpdate")]
        public JsonActionResult FullUpdate([FromBody] T_BD_PICTURE entity)
        {
            return SafeExecute(() =>
            {
                var files = entity.Nav_PictureFiles;
                entity.Nav_PictureFiles = null;
                var after = this.GetEntity(x => x.ID == entity.ID, "Nav_PictureFiles");
                if (after == null)
                {
                    this.AddEntity(entity);
                    if (files != null && files.Any())
                        this.BantchAddEntity(files);
                }
                else
                {
                    UpdateEntity(entity);
                    if (after.Nav_PictureFiles != null)
                        BantchDeleteEntity(after.Nav_PictureFiles.Select(x => x.ID).ToList());
                    if (files != null && files.Any())
                        BantchAddEntity(files);
                }
                return true;
            });
        }
        /// 
        /// 文件更新
        /// 
        /// 
        /// 
        [HttpPost, Route("FileFullUpdate")]
        public JsonActionResult FileFullUpdate([FromBody] T_BD_PICTURE entity)
        {
            return SafeExecute(() =>
            {
                entity.DATA_TYPE = (int)FMFileType.文件;
                var files = entity.Nav_PictureFiles;
                entity.Nav_PictureFiles = null;
                var after = this.GetEntity(x => x.ID == entity.ID, "Nav_PictureFiles");
                if (after == null)
                {
                    this.AddEntity(entity);
                    if (files != null && files.Any())
                        this.BantchAddEntity(files);
                }
                else
                {
                    UpdateEntity(entity);
                    if (after.Nav_PictureFiles != null)
                        BantchDeleteEntity(after.Nav_PictureFiles.Select(x => x.ID).ToList());
                    BantchAddEntity(files);
                }
                return true;
            });
        }
        /// 
        /// 更新
        /// 
        /// 
        /// 
        [HttpPost, Route("UpdateAndSendFolw")]
        public JsonActionResult UpdateAndSendFolw([FromBody] T_BD_PICTURE entity)
        {
            return SafeExecute(() =>
            {
                var files = entity.Nav_PictureFiles;
                entity.Nav_PictureFiles = null;
                var after = this.GetEntity(x => x.ID == entity.ID, "Nav_PictureFiles");
                var flowService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService();
                //图片审批
                flowService.SendFlowAndCommit(entity, (int)PFCodeRuleType.审批流编码, "1592907699376", () =>
                {
                    if (after == null)
                    {
                        this.AddEntityNoCommit(entity);
                        if (files != null && files.Any())
                            this.BantchAddEntityNoCommit(files);
                    }
                    else
                    {
                        UpdateEntityNoCommit(entity);
                        if (after.Nav_PictureFiles != null)
                            BantchDeleteEntityNoCommit(after.Nav_PictureFiles.Select(x => x.ID).ToList());
                        if (files != null && files.Any())
                            BantchAddEntityNoCommit(files);
                    }
                });
                return true;
            });
        }
        /// 
        /// 批量删除数据
        /// 
        /// id字符串(id用逗号分隔)
        /// 
        [HttpGet, Route("FullBatchDelete")]
        public JsonActionResult FullBatchDelete(string ids)
        {
            return SafeExecute(() =>
            {
                var arrIds = ids.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(i => new Guid(i));
                var filter = new BaseFilter
                {
                    IgnoreOrgRule = true,
                    SelectField = new string[] {"ID", "Nav_PictureFiles.ID",
                    "Nav_PictureFiles.Nav_ImgFile.ID",
                "Nav_PictureFiles.Nav_ImgFile.Nav_Details.ID",
                    "Nav_PictureFiles.Nav_ImgFile.Nav_Details.Nav_File.ID",
                "Nav_PictureFiles.Nav_ImgFile.Nav_File.ID"}
                };
                var pictures = this.GetEntities(i => arrIds.Contains(i.ID), filter,
                    "Nav_PictureFiles.Nav_ImgFile.Nav_Details.Nav_File");
                var pictureIds = pictures.Select(i => i.ID).ToList();
                var pictureFileId = pictures.SelectMany(i => i.Nav_PictureFiles.Select(i => i.ID)).ToList();
                var imgFileId = pictures.SelectMany(i => i.Nav_PictureFiles.Select(i => i.Nav_ImgFile.ID)).ToList();
                //var pfFileId= pictures.SelectMany(i => i.Nav_PictureFiles.Select(i => i.Nav_ImgFile.Nav_File.ID)).ToList();
                var detailId = pictures.SelectMany(i => i.Nav_PictureFiles.SelectMany(i => i.Nav_ImgFile.Nav_Details.Select(x => x.ID))).ToList();
                var fileId = pictures.SelectMany(i => i.Nav_PictureFiles.SelectMany(i => i.Nav_ImgFile.Nav_Details.Select(x => x.Nav_File.ID))).ToList();
                this.BantchDeleteEntity(detailId);
                this.BantchDeleteEntity(pictureFileId);
                this.BantchDeleteEntity(imgFileId);
                this.BantchDeleteEntity(fileId);
                this.BantchDeleteEntity(pictureIds);
                return true;
            });
        }
        /// 
        /// 批量删除数据
        /// 
        /// id字符串(id用逗号分隔)
        /// 
        [HttpGet, Route("FullDelete")]
        public JsonActionResult FullDelete(string id)
        {
            return this.FullBatchDelete(id);
        }
    }
}