using MediatR;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace Sledgemapper.Api.Handlers
{
    public class NewCampaignCommandHandler : IRequestHandler<NewCampaignCommand, bool>
    {
        private readonly IMediator _mediator;
        private readonly SledgemapperDbContext _dbcontext;

        public NewCampaignCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext)
        {
            _mediator = mediator;
            _dbcontext = dbcontext;
        }

        public async Task<bool> Handle(NewCampaignCommand notification, CancellationToken cancellationToken)
        {
            try
            {
                var user = await _dbcontext.Users.FindAsync(notification.UserId);
                _dbcontext.Attach(user);
                var campaign = new Core.Entities.Campaign
                {
                    CampaignName = notification.CampaignName,
                    OwnerId = user.Id,
                    InvitedUsers = new System.Collections.Generic.List<Entities.User> { user }
                };

                _dbcontext.Campaigns.Add(campaign);

                await _dbcontext.SaveChangesAsync();
                return true;
            }
            catch (Exception ex)
            {
                

            }
            return false;
        }
    }
}