using Hotline.CallCenter.Calls;
using Hotline.DI;
using Hotline.Share.Enums.CallCenter;
using Hotline.Share.Notifications.NewRockCallCenter;
using MediatR;

namespace Hotline.Application.Handlers.CallCenter.CallState
{
    [Injection(EventHandlerType = EEventHandlerType.CallCenter, Label = AppDefaults.CallCenterType.XunShi)]
    public class AlertMenuToOuterNotificationHandler:INotificationHandler<AlertMenuToOuterNotification>
    {
        private readonly ICallRepository _callRepository;
        private readonly ICallDetailRepository _callDetailRepository;

        public AlertMenuToOuterNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository)
        {
            _callRepository = callRepository;
            _callDetailRepository = callDetailRepository;
        }

        public async Task Handle(AlertMenuToOuterNotification notification, CancellationToken cancellationToken)
        {
            var model = await _callRepository.GetAsync(
                x => x.ConversationId == notification.Outer.Id && x.ToNo == notification.Outer.To &&
                     x.Trunk == notification.Outer.Trunk && x.CreationTime >= DateTime.Now.AddHours(-2),true,x=>x.CreationTime,
                cancellationToken);
            if (model!=null)
            {
                model.CallStatus = ECallStatus.Alert;
                await _callRepository.UpdateAsync(model, cancellationToken);
                var detail = new CallDetail()
                {
                    CallId = model.Id,
                    CallStatus = ECallStatus.Alert,
                    OMCallId = notification.Outer.CallId,
                    ConversationId = notification.Outer.Id,
                    EventName = notification.Attribute,
                    FromNo = "",
                    ToNo = notification.Outer.To,
                };
                await _callDetailRepository.AddAsync(detail, cancellationToken);
            }
        }
    }
}
