using CZFW.Framework.Logic;
using CZFW.Framework.Model.Entity;
using CZFW.Framework.Model.ViewModel;
using CZKJ.GBRS2.Entity;
using CZKJ.GBRS2.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CZKJ.GBRS2.Logic
{
    public class MappingLogic : LogicBase<MappingEntity>, IMapping
    {
        public ResultModel AddMapping(int module, IList<int> idList)
        {
           if(idList!=null)
            {
                IList<MappingEntity> list = new List<MappingEntity>();
                foreach(var item in idList)
                {
                    var entity = new MappingEntity { Module = module, RefId = item };
                    list.Add(entity);
                }
                return AddEntities(list);
            }
            return new ResultModel { Success = true };
        }

        public IList<ProductEntity> GetProductTableList(int module, int pageIndex, int pageSize, out int rowsCount)
        {
            var queryable = Queryable.Where(x => x.Module == module);
            rowsCount = queryable.Count();
            queryable = queryable.Skip((pageIndex - 1) * pageSize).Take(pageSize);
            var result = from a in queryable
                         join p in DbContext.Set<ProductEntity>() on a.RefId equals p.Id
                         join b in DbContext.Set<TypeEntity>() on p.TypeId equals b.Id into temp
                         from t in temp.DefaultIfEmpty()
                         select new
                         {
                             Id = p.Id,
                             Title = p.Title,
                             TypeName = t.Name,
                             Image = p.Image,
                             Summary = p.Summary,
                             PublishTime = p.PublishTime
                         };
            return result.ToList().Select(x => new ProductEntity
            {
                Id = x.Id,
                Title=x.Title,
                TypeName=x.TypeName,
                Image=x.Image,
                Summary=x.Summary,
                PublishTime=x.PublishTime
            }).ToList();
        }

        public ResultModel RemoveMapping(int module, int refId)
        {
            var entity = GetEntity(x=>x.Module==module&&x.RefId==refId);
            if(entity ==null)
            {
                return new ResultModel { Success = false, Message = "未删除任何数据" };
            }
            return RemoveEntity(entity.Id);
        }
        public IList<ArticleEntity> GetArticleTableList(int module, int pageIndex, int pageSize, out int rowsCount)
        {
            var queryable = Queryable.Where(x => x.Module == module);
            rowsCount = queryable.Count();
            queryable = queryable.Skip((pageIndex - 1) * pageSize).Take(pageSize);
            var result = from x in queryable
                         join ai in DbContext.Set<ArticleEntity>() on x.RefId equals ai.Id
                         join ty in DbContext.Set<TypeEntity>() on ai.TypeId equals ty.Id
                         select new
                         {
                             Id = ai.Id,
                             Title = ai.Title,
                             Image = ai.Image,
                             Summary = ai.Summary,
                             Detail = ai.Detail,
                             PublishTime = ai.PublishTime,
                             TypeName = ty.Name
                         };
            return result.ToList().Select(x => new ArticleEntity
            {
                Id = x.Id,
                Title = x.Title,
                Image = x.Image,
                Summary = x.Summary,
                Detail = x.Detail,
                PublishTime = x.PublishTime,
                TypeName = x.TypeName
            }).ToList();
        }
    }
}