<%
function formatNumber(x) {
  return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
%>

<mjml>
  <mj-head>
    <mj-style>
      .moz-text-html input.mj-accordion-checkbox + * .mj-accordion-title {
        cursor: auto;
        touch-action: auto;
        -webkit-user-select: auto;
        -moz-user-select: auto;
        user-select: auto;
      }

      .moz-text-html input.mj-accordion-checkbox + * .mj-accordion-content {
        overflow: hidden;
        display: block;
      }

      .moz-text-html input.mj-accordion-checkbox + * .mj-accordion-ico {
        display: none;
      }

      a {
        color: #41acdd;
        text-decoration: none;
      }

      a:hover {
        text-decoration: underline;
      }
    </mj-style>
    <mj-style inline="inline">
      ul {
        margin-block-start: 0;
        margin-block-end: 0;
      }

      .success {
        color: #0dac50;
      }

      .error {
        color: #e74c3c;
      }
    </mj-style>

    <mj-attributes>
      <mj-accordion border="none" padding="1px" />
      <mj-accordion-element
        icon-wrapped-url="https://i.imgur.com/Xvw0vjq.png"
        icon-unwrapped-url="https://i.imgur.com/KKHenWa.png"
        icon-height="24px"
        icon-width="24px"
      />
      <mj-accordion-element
        icon-wrapped-url="https://i.imgur.com/Xvw0vjq.png"
        icon-unwrapped-url="https://i.imgur.com/KKHenWa.png"
        icon-height="24px"
        icon-width="24px"
      />
      <mj-accordion-title
        font-family="Roboto, Open Sans, Helvetica, Arial, sans-serif"
        background-color="#fff"
        color="#031017"
        padding="15px"
        font-size="18px"
      />
      <mj-accordion-text
        font-family="Open Sans, Helvetica, Arial, sans-serif"
        background-color="#fafafa"
        padding="15px"
        color="#505050"
        font-size="14px"
      />
    </mj-attributes>
  </mj-head>

  <mj-body>
    <mj-section padding="15px 0">
      <mj-column>
        <mj-image
          css-class="logo"
          width="300px"
          src="https://openagenda.com/images/openagenda.png"
          href="https://openagenda.com/"
          padding="0"
          alt=""
        />
      </mj-column>
    </mj-section>

    <mj-section padding="10px 0">
      <mj-column>
        <mj-text font-size="22px" padding="0 15px">Rapport de synchronisation</mj-text>
      </mj-column>
    </mj-section>

    <mj-section>
      <mj-column>
        <mj-text padding="10px 15px 10px 15px">
          <a href="https://openagenda.zendesk.com/hc/fr/articles/360012200019">Explication du rapport de
            synchronisation</a>
        </mj-text>

        <% for (const { sectionTitle, startSyncDateStr, savedEvents, agendaErrors, stats } of data) { %>
          <mj-text padding="10px 15px 10px 15px">
            <% if (sectionTitle) { %>
              <h1><%= sectionTitle %></h1>
              Événements présents dans la source: <b><%- formatNumber(savedEvents) %></b>
            <% } %>
            <%- sectionTitle && agendaErrors ? '<br />' : '' %>
            <%- agendaErrors
              ? `Erreurs de choix/récupération d'agenda: <b class="error">${agendaErrors}</b>`
              : '' %>
          </mj-text>

          <mj-accordion>
            <% for (const { agenda, ...agendaStats } of stats) { %>
              <mj-accordion-element>
                <mj-accordion-title>
                  <b><a href="https://openagenda.com/<%= agenda.slug %>"><%= agenda.title %></a></b><br />
                  <small>
                    Synchronisation du <%= startSyncDateStr %>

                    <% if (agendaStats.eventListError) { %>
                      <br />
                      <b class="error"><u>La source de données a présenté des erreurs lors de sa lecture, la
                          synchronisation a été
                          interrompue.</u></b>
                    <% } else { %>
                      <br />
                      Vérification des totaux: <%- (agendaStats.savedEvents || 0)
                      + ((agendaStats.splittedSourceLocations || 0) - (agendaStats.splitSourceLocations || 0))
                      - ((agendaStats.mergedSourceEvents || 0) - (agendaStats.mergedEvents || 0))
                      - (agendaStats.eventsWithoutLocation || 0)
                      - (agendaStats.ignoredEvents || 0)
                      - ((agendaStats.createdEvents || 0) + (agendaStats.recreatedEvents || 0) + (agendaStats.updatedEvents || 0) + (agendaStats.upToDateEvents || 0)) === 0
                        ? `<span class="success">ok</span>` : `<span class="error">incorrect</span>` %>
                    <% } %>

                    <%
                      const totalErrors = formatNumber(
                        (agendaStats.locationErrors || 0)
                        + (agendaStats.eventMapErrors || 0)
                        + (agendaStats.eventCreateErrors || 0)
                        + (agendaStats.eventFalsyRemoveErrors || 0)
                        + (agendaStats.eventRecreateErrors || 0)
                        + (agendaStats.eventUpdateErrors || 0)
                        + (agendaStats.eventCreateTimingsErrors || 0)
                        + (agendaStats.eventRemoveTimingsErrors || 0)
                        + (agendaStats.eventRemoveErrors || 0)
                      );
                    %>

                    <% if (totalErrors > 0) { %>
                      <br />
                      <span class="error">
                  Avec un total de <b><%- formatNumber(totalErrors) %></b> erreur<%- totalErrors > 1 ? 's' : '' %>.
                </span>
                    <% } %>
                  </small>
                </mj-accordion-title>
                <% if (agendaStats.eventListError) { %>
                  <mj-accordion-text color="#e74c3c" padding="10px 25px 10px 25px">
                    <%= JSON.stringify(agendaStats.eventListError) %>
                  </mj-accordion-text>
                <% } else { %>
                  <mj-accordion-text padding="10px 0 10px 0">
                    <ul>
                      <%- agendaStats.savedEvents
                        ? `<li>Événements présents dans la source: <b>${formatNumber(agendaStats.savedEvents)}</b></li>`
                        : '<li>Aucun événement présent dans la source.</li>' %>
                      <%- agendaStats.eventsWithoutLocation
                        ? `<li>Événements sans lieu: <b>${formatNumber(agendaStats.eventsWithoutLocation)}</b></li>`
                        : '' %>
                      <%- agendaStats.splitSourceLocations
                        ? `<li>Événements de la source distribués sur plusieurs événements (plusieurs lieux): <b>${formatNumber(agendaStats.splitSourceLocations)}</b> -> <b>${formatNumber(agendaStats.splittedSourceLocations)}</b></li>`
                        : '' %>
                      <%- agendaStats.mergedSourceEvents
                        ? `<li>Événements de la source fusionnés: <b>${formatNumber(agendaStats.mergedSourceEvents)}</b> -> <b>${formatNumber(agendaStats.mergedEvents)}</b></li>`
                        : '' %>
                      <%- agendaStats.splitSourceEvents
                        ? `<li>Événements de la source distribués sur plusieurs événements (horaires): <b>${formatNumber(agendaStats.splitSourceEvents)}</b> -> <b>${formatNumber(agendaStats.splittedSourceEvents)}</b></li>`
                        : '' %>
                      <%- agendaStats.ignoredEvents
                        ? `<li>Événements ignorés: <b>${formatNumber(agendaStats.ignoredEvents)}</b>`
                        : `` %>
                      <%- agendaStats.upToDateEvents
                        ? `<li>Événements déjà à jour: <b>${formatNumber(agendaStats.upToDateEvents)}</b></li>`
                        : '' %>
                      <%- agendaStats.createdEvents ? `<li>Événements créés: <b>${formatNumber(agendaStats.createdEvents)}</b></li>` : '' %>
                      <%- agendaStats.recreatedEvents
                        ? `<li>Événements re-créés: <b>${formatNumber(agendaStats.recreatedEvents)}</b></li>`
                        : '' %>
                      <%- agendaStats.updatedEvents
                        ? `<li>Événements mis à jour: <b>${formatNumber(agendaStats.updatedEvents)}</b></li>`
                        : '' %>
                      <%- agendaStats.invalidImages
                        ? `<li>Images invalides détectées: <b>${formatNumber(agendaStats.invalidImages)}</b></li>`
                        : '' %>
                      <%- agendaStats.createdLocations ? `<li>Lieux créés: <b>${formatNumber(agendaStats.createdLocations)}</b></li>` : '' %>

                      <%- agendaStats.sourceErrors && agendaStats.sourceErrors.missingTimings && agendaStats.sourceErrors.missingTimings.length
                        ? `<li class="error">Événements de la source sans horaire: <b>${formatNumber(agendaStats.sourceErrors.missingTimings.length)}</b><br />${agendaStats.sourceErrors.missingTimings.join(
                          ', ')}</li>`
                        : '' %>
                      <%- agendaStats.sourceErrors && agendaStats.sourceErrors.missingLocation && agendaStats.sourceErrors.missingLocation.length
                        ? `<li class="error">Événements de la source sans lieu: <b>${formatNumber(agendaStats.sourceErrors.missingLocation.length)}</b><br />${agendaStats.sourceErrors.missingLocation.join(
                          ', ')}</li>`
                        : '' %>
                      <%- agendaStats.sourceErrors && agendaStats.sourceErrors.validationError && agendaStats.sourceErrors.validationError.length
                        ? `<li class="error">Événements invalides: <b>${formatNumber(agendaStats.sourceErrors.validationError.length)}</b><br />${agendaStats.sourceErrors.validationError.join(
                          ', ')}</li>`
                        : '' %>
                      <%- agendaStats.locationErrors
                        ? `<li class="error">Erreurs lors de la récupération du lieu: <b>${formatNumber(agendaStats.locationErrors)}</b></li>`
                        : '' %>
                      <%- agendaStats.oaRequestErrors
                        ? `<li class="error">Erreurs provenants des requêtes vers OpenAgenda: <b>${formatNumber(agendaStats.oaRequestErrors)}</b></li>`
                        : '' %>
                    </ul>
                  </mj-accordion-text>
                <% } %>
              </mj-accordion-element>
            <% } %>
          </mj-accordion>
        <% } %>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>
