include composer

mixin renderComment (comment, options)
  - var resourceId = comment.resource ? (comment.resource._id || comment.resource) : undefined;
  article(data-comment-id= comment._id).uk-comment.dtp-site-comment
    header.uk-comment-header
      div(uk-grid).uk-grid-medium.uk-flex-middle
        .uk-width-auto
          if comment.author.picture && comment.author.picture.small
            img(src= `/image/${comment.author.picture.small._id}`).site-profile-picture.sb-small.uk-comment-avatar
          else
            img(src="/img/default-member.png").site-profile-picture.sb-small.uk-comment-avatar

        .uk-width-expand
          h4.uk-comment-title.uk-margin-remove= comment.author.displayName || comment.author.username
          .uk-comment-meta= moment(comment.created).fromNow()

        if user && (comment.status === 'published')
          .uk-width-auto
            button(type="button").uk-button.uk-button-link
              span
                i.fas.fa-ellipsis-v
            div(data-comment-id= comment._id, uk-dropdown={ mode: 'click', pos: 'bottom-right' })
              ul.uk-nav.uk-dropdown-nav
                if user && user._id.equals(comment.author._id)
                  li.uk-nav-header.no-select Author menu
                  li
                    a(
                      href="",
                      data-comment-id= comment._id,
                      onclick=`return dtp.app.comments.deleteComment(event);`,
                    ) Delete
                else if user
                  li.uk-nav-header.no-select Moderation menu
                  li
                    a(
                      href="",
                      data-resource-type= comment.resourceType,
                      data-resource-id= resourceId,
                      data-comment-id= comment._id,
                      onclick=`return dtp.app.comments.showReportCommentForm(event);`,
                    ) Report
                  li
                    a(
                      href="",
                      data-resource-type= comment.resourceType,
                      data-resource-id= resourceId,
                      data-comment-id= comment._id,
                      onclick=`return dtp.app.comments.blockCommentAuthor(event);`,
                    ) Block author

    .uk-comment-body
      case comment.status
        when 'published'
          if comment.flags && comment.flags.isNSFW
            div.uk-alert.uk-alert-info.uk-border-rounded
              div(uk-grid).uk-grid-small.uk-text-small.uk-flex-middle
                .uk-width-expand NSFW comment hidden by default. Use the eye to show/hide.
                .uk-width-auto
                  button(
                    type="button",
                    uk-toggle={ target: `.comment-content[data-comment-id="${comment._id}"]` },
                    title="Show/hide the comment text",
                  ).uk-button.uk-button-link
                    span
                      i.fas.fa-eye
          .comment-content(data-comment-id= comment._id, hidden= comment.flags ? comment.flags.isNSFW : false)!= marked.parse(comment.content)
        when 'removed'
          .comment-content.uk-text-muted [comment removed]
        when 'mod-warn'
          alert
            span A warning has been added to this comment.
            button(type="button", uk-toggle={ target: `.comment-content[data-comment-id="${comment._id}"]` })
          .comment-content(data-comment-id= comment._id, hidden)!= marked.parse(comment.content)
        when 'mod-removed'
          .comment-content.uk-text-muted [comment removed]

    //- Comment meta bar
    div(uk-grid).uk-grid-small
      .uk-width-auto
        button(
          type="button",
          data-comment-id= comment._id,
          data-vote="up",
          onclick=`return dtp.app.comments.submitCommentVote(event);`,
          title="Upvote this comment",
        ).uk-button.uk-button-link
          +renderLabeledIcon('fa-chevron-up', formatCount(comment.resourceStats ? comment.resourceStats.upvoteCount : 0))
      .uk-width-auto
        button(
          type="button",
          data-comment-id= comment._id,
          data-vote="down",
          onclick=`return dtp.app.comments.submitCommentVote(event);`,
          title="Downvote this comment",
        ).uk-button.uk-button-link
          +renderLabeledIcon('fa-chevron-down', formatCount(comment.resourceStats ? comment.resourceStats.downvoteCount : 0))
      .uk-width-auto
        button(
          type="button",
          data-comment-id= comment._id,
          onclick=`return dtp.app.comments.openReplies(event);`,
          title="Load replies to this comment",
        ).uk-button.uk-button-link
          +renderLabeledIcon('fa-comment', formatCount(comment.commentStats ? comment.commentStats.replyCount : 0))
      .uk-width-auto
        button(
          type="button",
          data-comment-id= comment._id,
          onclick=`return dtp.app.comments.openReplyComposer(event);`,
          title="Write a reply to this comment",
        ).uk-button.uk-button-link
          +renderLabeledIcon('fa-reply', 'reply')

    //- Comment replies and reply composer
    div(
      data-comment-id= comment._id,
      data-root-url= options.rootUrl,
      dtp-comments= options.name,
      hidden,
    ).dtp-reply-composer.uk-margin
      if user && user.permissions.canComment
        .uk-margin
          +renderCommentComposer(`composer-reply-${comment._id}`, Object.assign({ showCancel: true, replyTo: comment._id }, options))
    
    div(data-comment-id= comment._id, hidden).dtp-reply-list-container.uk-margin
      ul(data-comment-id= comment._id).dtp-reply-list.uk-list.uk-margin-medium-left
        p(id="empty-comments-label", data-comment-id= comment._id) No comments.