public static ProjectCommentModerationModel ToModel(this ProjectCommentModeration entity)
        {
            if (entity == null)
                return null;

            var model = new ProjectCommentModerationModel
            {
                Id = entity.Id,
                Comment = entity.Comment.ToModel(),
                ComplaintId = entity.ComplaintId,
                ComplaintType = entity.ComplaintType,
                TypeDescription = entity.ComplaintType.GetDescription(),
                ModerationQueue = entity.ModerationQueue.ToModel(),
                Reason = entity.Reason
            };

            return model;
        }
        public ActionResult Remove(int id, bool type, ProjectCommentModerationModel form)
        {
            if (!_permissionService.Authorize(PermissionProvider.ManageProjects))
                throw new ArgumentException("Invalid permissions.");

            // Get the queue
            var queue = _moderationQueueService.GetProjectCommentModerationByModerationQueueId(id);
            if (queue == null || queue.Deleted)
                return RedirectToAction("index", "moderation");

            // Get the comment
            var comment = queue.Comment;
            if (comment == null)
                return RedirectToAction("index");

            var model = queue.ToModel();

            try
            {
                if (type)
                {
                    comment.ModeratedBy = _workContext.CurrentUser.Id;
                    comment.ModeratedDate = DateTime.Now;
                    comment.Deleted = true;

                    // Update the comment entity
                    _commentService.UpdateComment(comment);

                    // Create a success notification
                    SuccessNotification("The comment has been removed.");

                    // Send message to the comment flagger
                    _messageQueueService.CommentMessage(comment, MessageType.CommentRemovalApproved, queue.ModerationQueue.CreatedBy, form.ModerationQueue.Notes, form.UserMessage);

                    // Remove outstanding comment complaints if any are in the queue as the comment has been deleted.
                    _moderationQueueService.RemoveAllProjectCommentModerationEntriesByCommentId(comment.Id, model.ModerationQueue.Id);
                }
                else
                {
                    comment.ModeratedBy = _workContext.CurrentUser.Id;
                    comment.ModeratedDate = DateTime.Now;
                    comment.ModerationRequestCount = comment.ModerationRequestCount-1;

                    // Update the comment entity
                    _commentService.UpdateComment(comment);

                    // Create a success notification
                    SuccessNotification("The comment remains active.");

                    // Send message to comment author and the comment flagger
                    _messageQueueService.CommentMessage(comment, MessageType.CommentRemovalRejected, queue.ModerationQueue.CreatedBy, "", form.UserMessage);
                }

                // Close the moderation queue item
                var queueUpdate = _moderationQueueService.GetById(id);
                queueUpdate.StatusType = ModerationStatusType.Closed;
                _moderationQueueService.UpdateModerationQueue(queueUpdate);

                return RedirectToRoute("Admin_default", new { Controller = "moderation", Action = "index" });
            }
            catch (Exception ex)
            {
                ErrorNotification(ex.ToString());
            }

            return View(model);
        }