<article id="comment_<%= comment.id %>" class="comment message"
          data-id="<%= comment.id %>"
          data-post-id="<%= comment.post_id %>"
          data-creator-id="<%= comment.creator_id unless redact_deleted? %>"
          data-updater-id="<%= comment.updater_id unless redact_deleted? %>"
          data-score="<%= comment.score %>"
          data-do-not-bump-post="<%= comment.do_not_bump_post? %>"
          data-is-deleted="<%= comment.is_deleted? %>"
          data-is-sticky="<%= comment.is_sticky? %>"
          data-is-dimmed="<%= dimmed? %>"
          data-is-thresholded="<%= thresholded? %>"
          data-is-reported="<%= reported? %>"
          data-is-upvoted="<%= upvoted? %>"
          data-is-downvoted="<%= downvoted? %>">

  <div class="author">
    <div class="author-name">
      <% if redact_deleted? %>
        [deleted]
      <% else %>
        <%= link_to_user comment.creator %>
        <% if comment.is_deleted? %>
          (deleted)
        <% end %>
      <% end %>
    </div>
    <%= link_to time_ago_in_words_tagged(comment.created_at), comment, class: "message-timestamp" %>
  </div>

  <div class="content">
    <% if thresholded? %>
      <%= link_to "[hidden]", "javascript:void(0)", class: "unhide-comment-link" %>
    <% end %>

    <%= tag.div class: "body prose", style: ("display: none;" if thresholded?) do %>
      <% if redact_deleted? %>
        <p>[deleted]</p>
      <% else %>
        <%= format_text(comment.body, data: dtext_data) %>
      <% end %>

      <%= render "application/update_notice", record: comment %>
    <% end %>

    <menu>
      <% if votable? %>
        <li class="comment-votes">
          <% if current_user.is_anonymous? %>
            <%= link_to upvote_icon, login_path(url: request.fullpath), class: "comment-upvote-link inactive-link" %>
          <% elsif upvoted? %>
            <%= link_to upvote_icon, comment_vote_path(current_vote), class: "comment-upvote-link comment-unvote-link active-link", method: :delete, remote: true %>
          <% else %>
            <%= link_to upvote_icon, comment_comment_votes_path(comment_id: comment.id, score: "1"), class: "comment-upvote-link inactive-link", method: :post, remote: true %>
          <% end %>

          <% if policy(CommentVote).can_see_votes? %>
            <%= link_to comment_votes_path(search: { comment_id: comment.id }, variant: "compact"), class: "inactive-link" do %>
              <span class="comment-score"><%= comment.score %></span>
            <% end %>
          <% else %>
            <span class="comment-score"><%= comment.score %></span>
          <% end %>

          <% if current_user.is_anonymous? %>
            <%= link_to downvote_icon, login_path(url: request.fullpath), class: "comment-downvote-link inactive-link" %>
          <% elsif downvoted? %>
            <%= link_to downvote_icon, comment_vote_path(current_vote), class: "comment-downvote-link comment-unvote-link active-link", method: :delete, remote: true %>
          <% else %>
            <%= link_to downvote_icon, comment_comment_votes_path(comment_id: comment.id, score: "-1"), class: "comment-downvote-link inactive-link", method: :post, remote: true %>
          <% end %>
        </li>
      <% end %>

      <% if policy(comment).reply? %>
        <li class="comment-reply">
          <% if current_user.is_anonymous? %>
            <%= link_to "Reply", login_path(url: request.fullpath) %>
          <% elsif context == :index_by_comment %>
            <%= link_to "Reply", new_comment_path(id: comment, comment: { post_id: comment.post_id }) %>
          <% else %>
            <%= link_to "Reply", new_comment_path(id: comment, comment: { post_id: comment.post_id }), remote: true %>
          <% end %>
        </li>
      <% end %>

      <% if reported? %>
        <li class="moderation-report-notice">
          Reported (<%= link_to pluralize(comment.moderation_reports.length, "report"), moderation_reports_path(search: { model_type: "Comment", model_id: comment.id }) %>)
        </li>
      <% end %>

      <%= render PopupMenuComponent.new do |menu| %>
        <% if policy(comment).update? %>
          <% menu.item do %>
            <%= link_to edit_comment_path(comment.id), id: "edit_comment_link_#{comment.id}", class: "edit_comment_link" do %>
              <%= edit_icon %> Edit
            <% end %>
          <% end %>

          <% menu.item do %>
            <% if comment.is_deleted? %>
              <%= link_to comment_path(comment.id), "data-params": "comment[is_deleted]=false", method: :put, remote: true do %>
                <%= undelete_icon %> Undelete
              <% end %>
            <% else %>
              <%= link_to comment_path(comment.id), "data-params": "comment[is_deleted]=true", "data-confirm": "Are you sure you want to delete this comment?", method: :put, remote: true do %>
                <%= delete_icon %> Delete
              <% end %>
            <% end %>
          <% end %>
        <% end %>

        <% if policy(comment).can_sticky_comment? %>
          <% menu.item do %>
            <% if comment.is_sticky? %>
              <%= link_to comment_path(comment.id), "data-params": "comment[is_sticky]=false", method: :put, remote: true do %>
                <%= unsticky_icon %> Unsticky
              <% end %>
            <% else %>
              <%= link_to comment_path(comment.id), "data-params": "comment[is_sticky]=true", method: :put, remote: true do %>
                <%= sticky_icon %> Sticky
              <% end %>
            <% end %>
          <% end %>
        <% end %>

        <% if policy(comment).reportable? %>
          <% menu.item do %>
            <%= link_to new_moderation_report_path(moderation_report: { model_type: "Comment", model_id: comment.id }), remote: true do %>
              <%= flag_icon %> Report
            <% end %>
          <% end %>
        <% end %>

        <% menu.item do %>
          <%= link_to comment_path(comment.id), class: "comment-copy-link" do %>
            <%= link_icon %> Copy ID
          <% end %>
        <% end %>

      <% end %>
    </menu>

    <% if policy(comment).update? %>
      <%= render "comments/form", comment: comment, hidden: true %>
    <% end %>
  </div>
</article>
