using TencentCloud.Tbm.V20180129.Models;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events;
using Volo.Abp.EventBus;
using Volo.Abp.EventBus.Local;
using Yi.Framework.Bbs.Domain.Entities;
using Yi.Framework.Bbs.Domain.Entities.Forum;
using Yi.Framework.Bbs.Domain.Shared.Consts;
using Yi.Framework.Bbs.Domain.Shared.Etos;
using Yi.Framework.Rbac.Domain.Entities;
using Yi.Framework.SqlSugarCore.Abstractions;

namespace Yi.Framework.Bbs.Domain.EventHandlers
{
    /// <summary>
    /// 评论创建的领域事件
    /// </summary>
    public class CommentCreatedEventHandler : ILocalEventHandler<EntityCreatedEventData<CommentAggregateRoot>>,
          ITransientDependency
    {
        private ILocalEventBus _localEventBus;
        private ISqlSugarRepository<DiscussAggregateRoot> _discussRepository;
        private ISqlSugarRepository<UserAggregateRoot> _userRepository;
        public CommentCreatedEventHandler(ILocalEventBus localEventBus, ISqlSugarRepository<DiscussAggregateRoot> discussRepository, ISqlSugarRepository<UserAggregateRoot> userRepository)
        {
            _userRepository = userRepository;
            _localEventBus = localEventBus;
            _discussRepository = discussRepository;
        }
        public async Task HandleEventAsync(EntityCreatedEventData<CommentAggregateRoot> eventData)
        {
            var commentEntity = eventData.Entity;

            //给创建者发布数量+1
            await _userRepository._Db.Updateable<BbsUserExtraInfoEntity>()
                                        .SetColumns(it => it.CommentNumber == it.CommentNumber + 1)
                                        .Where(it => it.UserId == commentEntity.CreatorId)
                                        .ExecuteCommandAsync();
            var disucssDto = await _discussRepository._DbQueryable
                 .Where(x => x.Id == commentEntity.DiscussId)
                .LeftJoin<UserAggregateRoot>((dicuss, user) => dicuss.CreatorId == user.Id)
               .Select((dicuss, user) =>
               new
               {
                   DiscussId = user.Id,
                   DiscussTitle = dicuss.Title,

               })
               .FirstAsync();

            var commentUser = await _userRepository.GetFirstAsync(x => x.Id == commentEntity.CreatorId);

            //截取30个长度
            var content = commentEntity.Content.Length >= 30 ? commentEntity.Content.Substring(0, 30)+"..." : commentEntity.Content;
            //通知主题作者，有人评论
            await _localEventBus.PublishAsync(new BbsNoticeEventArgs(disucssDto.DiscussId, string.Format(DiscussConst.CommentNotice, disucssDto.DiscussTitle, commentUser.UserName, content)), false);
        }
    }
}
