<?php
// $sondage fourni par le contrôleur
$idSondage   = htmlspecialchars($sondage->getId_sondage(), ENT_QUOTES, 'UTF-8');
$titre       = htmlspecialchars($sondage->getTitre(), ENT_QUOTES, 'UTF-8');
$description = htmlspecialchars($sondage->getDescription(), ENT_QUOTES, 'UTF-8');

$exclusif      = (int) $sondage->getExclusif();        // 1 = une seule fois par user
$voteMultiple  = (int) $sondage->getVote_multiple();   // 1 = select multiple
$voteVisible   = (int) $sondage->getVote_visible();    // non utilisé ici mais dispo

// L’utilisateur courant
$u = $_SESSION['user']->getId_utilisateur();

// A-t-il déjà répondu ?
$nbByUser = Reponse::getnbresponsuser($sondage->getId_sondage(), $u);
// $nbByUser renvoie un tableau de [nb, Id_sondage, libelle] groupé par libelle
$alreadyVoted = !empty($nbByUser) && array_sum(array_map(fn($r) => (int)$r[0], $nbByUser)) > 0;

// Options existantes (distinct libelle) + compte, pour alimenter le select / datalist
$agg = Reponse::getByIdSondagedysplaiable($sondage->getId_sondage()); // [[nb, Id_sondage, libelle], ...]
$existingLabels = array_values(array_unique(array_map(fn($r) => $r[2], $agg)));
$hasOptions = count($existingLabels) > 0;

// Désactivation du formulaire si exclusif et déjà voté
$disabledAttr = ($exclusif && $alreadyVoted) ? 'disabled aria-disabled="true"' : '';
?>

<div class="container my-4">
  <div class="row justify-content-center">
    <div class="col-12 col-md-8 col-lg-6">
      <div class="card shadow-sm">
        <div class="card-header">
          <h5 class="mb-0">Répondre au sondage</h5>
        </div>

        <div class="card-body">
          <h6 class="mb-1"><?php echo $titre; ?></h6>
          <?php if (!empty($description)) : ?>
            <p class="text-muted"><?php echo nl2br($description); ?></p>
          <?php endif; ?>

          <?php if ($exclusif && $alreadyVoted): ?>
            <div class="alert alert-info">
              Ce sondage est <strong>exclusif</strong> et vous avez déjà participé. Merci !
            </div>
          <?php endif; ?>

          <form action="index.php" method="post">
            <input type="hidden" name="uc" value="loged/sondage">
            <input type="hidden" name="mode" value="add">
            <input type="hidden" name="Id_sondage" value="<?php echo $idSondage; ?>">

            <?php if ($hasOptions): ?>
              <!-- SELECT d'options existantes -->
              <div class="mb-3">
                <label for="response" class="form-label">
                  <?php echo $voteMultiple ? 'Vos choix' : 'Votre choix'; ?>
                </label>

                <select
                  class="form-select"
                  id="response"
                  name="<?php echo $voteMultiple ? 'response[]' : 'response'; ?>"
                  <?php echo $voteMultiple ? 'multiple' : ''; ?>
                  <?php echo $disabledAttr; ?>
                  required
                >
                  <?php if (!$voteMultiple): ?>
                    <option value="" selected disabled>— Choisir une option —</option>
                  <?php endif; ?>

                  <?php foreach ($existingLabels as $label):
                      $safeLabel = htmlspecialchars($label, ENT_QUOTES, 'UTF-8');
                  ?>
                    <option value="<?php echo $safeLabel; ?>"><?php echo $safeLabel; ?></option>
                  <?php endforeach; ?>

                  <!-- Option Autre... pour saisir un libellé personnalisé -->
                  <option value="__AUTRE__">Autre…</option>
                </select>

                <div class="form-text">
                  <?php if ($voteMultiple): ?>
                    Maintiens Ctrl/Cmd pour sélectionner plusieurs réponses.
                  <?php else: ?>
                    Tu peux aussi choisir <em>Autre…</em> pour saisir ta propre réponse.
                  <?php endif; ?>
                </div>
              </div>

              <!-- Champ "Autre" masqué par défaut -->
              <div class="mb-3 d-none" id="autreWrapper">
                <label for="autreInput" class="form-label">Votre réponse (autre)</label>
                <input type="text" class="form-control" id="autreInput" placeholder="Saisir un libellé"
                       <?php echo $disabledAttr; ?>>
                <div class="form-text">Ce texte remplacera la sélection <em>Autre…</em>.</div>
              </div>

              <?php if ($voteMultiple): ?>
                <!-- Si multiple, on propose aussi un champ d’ajout libre multi -->
                <div class="mb-3">
                  <label for="ajoutsLibres" class="form-label">Ajouter d’autres réponses (séparées par des virgules)</label>
                  <input type="text" class="form-control" id="ajoutsLibres" placeholder="ex : Option X, Option Y"
                         <?php echo $disabledAttr; ?>>
                  <div class="form-text">Ces éléments seront ajoutés à votre sélection.</div>
                </div>
              <?php endif; ?>

            <?php else: ?>
              <!-- Aucune option en base : champ texte + suggestions via datalist si jamais -->
              <div class="mb-3">
                <label for="responseText" class="form-label">Votre réponse</label>
                <input type="text" class="form-control" id="responseText" name="response"
                       placeholder="Saisir votre réponse"
                       list="suggestions"
                       <?php echo $disabledAttr; ?>
                       required>
                <datalist id="suggestions">
                  <!-- vide ici, mais prêt si tu veux injecter des suggestions -->
                </datalist>
                <div class="form-text">Aucune option prédéfinie n’est disponible pour ce sondage.</div>
              </div>
            <?php endif; ?>

            <div class="d-flex justify-content-end gap-2">
              <a class="btn btn-outline-secondary" href="index.php?uc=loged/sondage">Annuler</a>
              <button type="submit" class="btn btn-primary" <?php echo $disabledAttr; ?>>Envoyer</button>
            </div>
          </form>
        </div>

        <?php if ($voteVisible && !empty($agg)): ?>
          <div class="card-footer">
            <div class="small text-muted mb-2">Répartition actuelle :</div>
            <ul class="list-unstyled mb-0">
              <?php foreach ($agg as $row):
                // $row = [nb, Id_sondage, libelle]
                $nb    = (int)$row[0];
                $label = htmlspecialchars($row[2], ENT_QUOTES, 'UTF-8');
              ?>
                <li>• <?php echo $label; ?> — <?php echo $nb; ?> vote<?php echo $nb>1?'s':''; ?></li>
              <?php endforeach; ?>
            </ul>
          </div>
        <?php endif; ?>

      </div>
    </div>
  </div>
</div>

<!-- JS: gère "Autre…" + ajouts libres pour le mode multiple -->
<script>
(function () {
  const select = document.getElementById('response');
  const autreWrapper = document.getElementById('autreWrapper');
  const autreInput = document.getElementById('autreInput');
  const ajoutsLibres = document.getElementById('ajoutsLibres');

  if (!select) return;

  function isMultiple() {
    return select.hasAttribute('multiple');
  }

  function toggleAutre() {
    if (!autreWrapper) return;
    const values = isMultiple()
      ? Array.from(select.selectedOptions).map(o => o.value)
      : [select.value];
    if (values.includes('__AUTRE__')) {
      autreWrapper.classList.remove('d-none');
      autreInput && autreInput.focus();
    } else {
      autreWrapper.classList.add('d-none');
      if (autreInput) autreInput.value = '';
    }
  }

  select.addEventListener('change', toggleAutre);
  document.addEventListener('DOMContentLoaded', toggleAutre);

  // Avant submit : injecter la valeur "Autre" et les "ajouts libres" dans le form
  select.form && select.form.addEventListener('submit', function (e) {
    // Si "Autre..." sélectionné et un texte saisi => remplacer/ajouter
    if (autreInput && autreInput.value.trim()) {
      if (isMultiple()) {
        // ajouter un input caché pour chaque valeur
        const hidden = document.createElement('input');
        hidden.type = 'hidden';
        hidden.name = 'response[]';
        hidden.value = autreInput.value.trim();
        this.appendChild(hidden);
      } else {
        // en mode simple, on écrase la valeur du select par celle de "autre"
        // en créant un input hidden name="response"
        const hidden = document.createElement('input');
        hidden.type = 'hidden';
        hidden.name = 'response';
        hidden.value = autreInput.value.trim();
        this.appendChild(hidden);
        // éviter que le select vide bloque la validation required
        select.removeAttribute('required');
      }
    }

    // Ajouts libres multiples (séparés par virgules)
    if (isMultiple() && ajoutsLibres && ajoutsLibres.value.trim()) {
      const parts = ajoutsLibres.value.split(',').map(s => s.trim()).filter(Boolean);
      for (const p of parts) {
        const hidden = document.createElement('input');
        hidden.type = 'hidden';
        hidden.name = 'response[]';
        hidden.value = p;
        this.appendChild(hidden);
      }
    }
  });
})();
</script>
