<% require 'base64'
   require 'json'
   require 'date'
   @current_time = Time.now.utc
%><%= render_file('common/header.html.erb', title: 'Choregraphies', refresh: 30) %>
<main class="container">
  <div>
  <h1>Show all choregraphie information</h1>
  <div>This page only show choregraphie when at least one holder exists.</div>
<%
  def display_holder(holder, value)
    begin
      holder_date = Time.parse(value)
      status = 'success'
      diff = (@current_time - holder_date).round(0)
      status = 'warning' if diff > 3600
      status = 'danger' if diff > 7200
      diff_txt = "#{diff % 3600} seconds"
      diff_txt = "#{(diff % 86400) / 3600} hours, #{diff_txt}" if diff > 3600
      diff_txt = "#{diff / 86400} days, #{diff_txt}" if diff > 86400
    rescue StandardError => e
      status = 'info'
      holder_date = "Cannot parse date: #{e}"
      diff_txt = "Error Parsing date #{value}"
    end
   ["<li class=\"list-group-item list-group-item-#{status}\">#{holder}: #{holder_date} : #{diff_txt} ago", status]
  end
%>

<div id="accordion">
<% kv('choregraphie', recurse:true).each do |tuple| %>
  <!-- <%= tuple['Key'] %> -->
  <%
    key = tuple['Key'].gsub('/', '-')
    if tuple['Value'].nil?
      json = []
      holders = []
    %>
    <div class="alert alert-warning" role="alert">
      Invalid Choregraphie data: <%= tuple %>
    </div>
  <%
    else
      json = JSON.parse(Base64.decode64(tuple['Value']))
      begin
        holders = json['holders']
      rescue StandardError => e
%>
        <h1>Failed to parse holders <%= e %> in <%= json %></h1>
<%
        holders = []
      end
    end
  %>
  <% if holders.count > 0 %>

    <div class="card">
      <div class="card-header" id="heading-<%= key %>">
        <span class="badge badge-pill badge-primary float-right"><%= holders.count%>/<%= json['concurrency'] %></span>
        <h5 class="mb-0">
          <a href="#<%= key %>" class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapse-<%= key %>" aria-expanded="true" aria-controls="collapse-<%= key %>">
            <%= tuple['Key'] %>
          </a>
        </h5>
      </div>
      <%
        text_result = ''
        clazz = 'collapse'
        holders.each_pair do |key,value|
          if value.is_a?(Hash)
            text_result+= "<li><u>#{key}:</u><ul class=\"list-group\">"
            value.each_pair do |k, v|
              res, status = display_holder(k, v)
              clazz = 'collapse show' unless status == 'success'
              text_result += res
            end
            text_result += '</ul></li>'
          else
            res, status = display_holder(key, value)
            clazz = 'collapse show' unless status == 'success'
            text_result << res
          end
        end
      %>
      <div id="collapse-<%= key %>" class="<%= clazz %>" aria-labelledby="heading-<%= key %>" data-parent="#accordion">
        <div class="card-body">
          <pre class="pre-scrollable"><code><%= JSON.pretty_generate(json) %></code></pre>
          <ul class="list-group">
            <%= text_result %>
          </ul>
        </div>
      </div>
    </div>
  <% end %>
<% end %>
</div>
</div>
</main>
<%= render_file 'common/footer.html.erb' %>