<script>
 import {
     Card,
     CardBody,
     Container,
     Icon,
 } from 'sveltestrap';

 import { challengeInfo } from '$lib/stores/challengeinfo.js';
 import { settings } from '$lib/stores/settings.js';
</script>

<Container class="my-3">
<h1 class="text-dark">
    {$challengeInfo.title}
    <small class="text-muted">Règles générales</small>
</h1>

<div class="card-group text-justify mb-5">
<div class="card niceborder">
<div class="card-body text-indent">
  <h2>Débloquage des challenges</h2>
  <p>
    Au début, seul le premier défi de chaque scénario est
    accessible.  Les défis de niveau supérieur sont débloqués en
    validant celui du niveau qui le précéde.
  </p>
  <hr>

  <h2>Le classement</h2>
  <p>
    Pour figurer dans le classement, il faut avoir réalisé au moins une
    action&nbsp;: qu'elle ajoute ou retire des points.
  </p>
  <p>
    En cas d'égalité au score, les équipes sont départagées selon leur
    ordre d'arrivée à ce score.
  </p>

  <hr>
  <h2>Calcul des points</h2>
  <p>
    Pour gagner des points, vous devez résoudre les défis qui vous sont
    proposés. Plus le challenge est compliqué, plus il rapporte de points.
  </p>

  <h3>Coût des tentatives</h3>
  <p>
    Vous disposez de 10&nbsp;tentatives pour trouver la/les solutions d'un
    challenge. Au delà, chaque tentative vous fait perdre une petite quantité
    de points comme suit&nbsp;:
  </p>
  <table class="table table-sm table-striped">
    <thead>
      <tr>
	<th>Nombre de tentatives</th>
	<th>Coût par tentative</th>
      </tr>
    </thead>
    <tbody>
      <tr>
	<td>0 à 10</td>
	<td>0&nbsp;point</td>
      </tr>
      <tr>
	<td>11 à 20</td>
	<td>{Math.round($settings.submissionCostBase * 10) / 10}&nbsp;{$settings.submissionCostBase < 2?"point":"points"}</td>
      </tr>
      <tr>
	<td>21 à 30</td>
	<td>{Math.round($settings.submissionCostBase * 20) / 10}&nbsp;{$settings.submissionCostBase * 2 < 2?"point":"points"}</td>
      </tr>
      <tr>
	<td>31 à 40</td>
	<td>{Math.round($settings.submissionCostBase * 30) / 10}&nbsp;{$settings.submissionCostBase * 3 < 2?"point":"points"}</td>
      </tr>
      <tr>
	<td>41 à 50</td>
	<td>{Math.round($settings.submissionCostBase * 40) / 10}&nbsp;{$settings.submissionCostBase * 4 < 2?"point":"points"}</td>
      </tr>
      <tr>
	<td>...</td>
	<td>...</td>
      </tr>
    </tbody>
  </table>
  <p>
    Par exemple&nbsp;:
  </p>
  <ul>
    <li>À&nbsp;10 tentatives, vous aurez perdu {$settings.submissionCostBase * 0}&nbsp;{$settings.submissionCostBase * 0 < 2?"point":"points"}.</li>
    <li>À&nbsp;15 tentatives, vous aurez perdu en tout {$settings.submissionCostBase * 5}&nbsp;{$settings.submissionCostBase * 5 < 2?"point":"points"}&nbsp;: <samp> {$settings.submissionCostBase} &times; 5</samp>.</li>
    <li>25 tentatives vous coûteront en tout {$settings.submissionCostBase * 20}&nbsp;{$settings.submissionCostBase * 20 < 2?"point":"points"}&nbsp;: <samp>{$settings.submissionCostBase} &times; 10 + {$settings.submissionCostBase} &times; 2 &times; 5</samp>.</li>
    <li>50 tentatives vous coûteront en tout {$settings.submissionCostBase * 100}&nbsp;{$settings.submissionCostBase * 100 < 2?"point":"points"}&nbsp;: <samp>{$settings.submissionCostBase} &times; 10 + {$settings.submissionCostBase} &times; 2 &times; 10 + {$settings.submissionCostBase} &times; 3 &times; 10 + {$settings.submissionCostBase} &times; 4 &times; 10</samp>.</li>
  </ul>
  {#if $settings.countOnlyNotGoodTries}
      <p>
          Seules les tentatives sans aucune bonne réponse sont prises en compte dans ce calcul. Lorsque vous complétez un formulaire avec un champ valide et un/des champs invalides, ceci n'est pas pris en compte dans le nombre de tentatives.
      </p>
  {:else}
      <p>
          La dernière tentative (lorsque tous les flags sont bons) est comptabilisée
          parmi ce nombre de tentatives.
      </p>
  {/if}
</div>
</div>
<div class="card niceborder">
<div class="card-body text-indent">
  {#if $settings.discountedFactor > 0}
      <h3>Décote des gains</h3>
      <p>
          Une validation d'étape ne vous garanti pas un solde de points fixe.
      </p>
      <p>
          Selon le nombre d'équipe qui valident un challenge donné, sa cote diminue et vous rapporte alors moins de points. Le gain est donc indépendemment du fait que vous ayez validé l'étape avant une autre équipe : le gain affiché est un gain maximum, entendu si aucune autre équipe ne le valide.
      </p>
      <p>
          Chaque validation réduit de {$settings.discountedFactor*100}&nbsp;% la cote de l'exercice.
      </p>
      <p>
          Ainsi, pour un exercice d'une valeur initiale de {10*$settings.globalScoreCoefficient}&nbsp;points&nbsp;:
      </p>
      <table class="table table-sm table-striped">
          <thead>
              <tr>
	          <th>Nombre d'équipes validant l'étape<br>à la fin de la compétition</th>
	          <th>Gain réel</th>
              </tr>
          </thead>
          <tbody>
              <tr>
	          <td>1</td>
	          <td>{10*$settings.globalScoreCoefficient}&nbsp;points</td>
              </tr>
              <tr>
	          <td>2</td>
	          <td>{10*$settings.globalScoreCoefficient*(1-$settings.discountedFactor)}&nbsp;points</td>
              </tr>
              <tr>
	          <td>5</td>
	          <td>{10*$settings.globalScoreCoefficient*(1-$settings.discountedFactor*5)}&nbsp;points</td>
              </tr>
              <tr>
	          <td>10</td>
	          <td>{10*$settings.globalScoreCoefficient*(1-$settings.discountedFactor*10)}&nbsp;points</td>
              </tr>
              <tr>
	          <td>20</td>
	          <td>{10*$settings.globalScoreCoefficient*(1-$settings.discountedFactor*20)}&nbsp;points</td>
              </tr>
              <tr>
	          <td>...</td>
	          <td>...</td>
              </tr>
          </tbody>
      </table>
      <hr>
  {/if}

  <h3>Coût des indices</h3>
  <p>
    Pour vous aider, certains défis vous proposent un ou
    plusieurs <strong>indices</strong>. Ces indices vous font perdre des
    points, la valeur de points perdus est indiquée pour chaque indice.
  </p>
  <p>
    Ces points sont perdus, que vous réussissiez ou non le défi.
  </p>
  <p>
    Vous pouvez débloquer des indices même si vous ne disposez pas de
    suffisamment de points (ou même si vous n'en avez pas encore) ; dans ce
    cas, votre score sera négatif.
  </p>
  <hr>

  <h3>Bonus</h3>
  <p>
    Plusieurs bonus peuvent s'appliquer en même temps, dans ce cas, le calcul
    du bonus est toujours effectué à partir du nombre de points initiaux du
    défi.
  </p>

  <h4>Prem's</h4>
  <p>
    Un bonus de +{$settings.firstBlood * 100}&nbsp;% est attribué à la première équipe qui résout un défi.
  </p>

  <h4>Bonus temporaires <small><Icon name="gift" aria-hidden="true" title="Des
    bonus existent pour au moins un challenge de ce thème" /></small></h4>
  <p>
    Au cours du challenge, afin de booster les équipes ou certains challenges,
    un bonus peut-être attribué si une tentative valide est envoyée durant la
    période d'activité du bonus. Restez à l'écoute et observez les challenges
    portant cette icône&nbsp;: <Icon name="gift"
    aria-hidden="true" title="Des bonus existent pour au moins un challenge de ce
    thème" />
  </p>
</div>
</div>
</div>
</Container>
