<?php

use YesWiki\Bazar\Service\EntryManager;

setlocale(LC_ALL, 'fr_FR.UTF8', 'fr_FR', 'fr', 'fr', 'fra', 'fr_FR@euro');
setlocale(LC_TIME, "fr_FR");
function calculateFreePlaces($fiche)
{
  //dump($fiche);
  $entries = $GLOBALS['wiki']->services->get(EntryManager::class)->search(
    [
      'queries' => ['trajet' => $fiche['id_fiche']],
      'formsIds' => [6],
      'keywords' => '',
      'user' => '',
      'minDate' => '',
      'correspondance' => ''
    ],
    true, // filter on read ACL,
    true // use Guard
  );
  //dump($entries);
  $nbres = count($entries);
  return (int) $fiche['capacite_de_transport'] - (int) $nbres;
}
function getStatus($fiche, $consultable = false)
{
  $dateFermeture = date(DATE_W3C, strtotime("-1 days", strtotime($fiche['date_du_trajet'])));
  $dateContrainte = !empty($fiche['bf_contrainte_date']) ? date(DATE_W3C, strtotime($fiche['bf_contrainte_date']))  : null;
  if (!empty($dateContrainte)) {
    $dateFermeture = $dateContrainte;
  }
  $dateDisparition = date(DATE_W3C, strtotime("+1 hour", strtotime($fiche['date_du_trajet'])));
  $dateJour = date(DATE_W3C);
  if (!empty($dateContrainte) && $dateJour < $dateContrainte) {
    $status = 'Ouvert';
  } elseif ($dateJour < $dateFermeture) {
    $status = 'Ouvert';
  } elseif ($dateJour < $dateDisparition) {
    $status = 'Fermé';
  } else {
    if (!$consultable) {
      $status = 'Fini';
    } else {
      $status = 'Fini consultable';
    }
  }
  return $status;
}

function displayReservation($fiche)
{
  $output = '';
  $isProducteur = ($GLOBALS['wiki']->GetUserName() == $GLOBALS['wiki']->GetPageOwner($fiche['listefiche8producteur']));
  $status = getStatus($fiche, $GLOBALS['wiki']->UserIsOwner($fiche['id_fiche']) || $isProducteur);
  if ($status == 'Fini consultable' || $status == 'Ouvert' || $status == 'Fermé') {
    // récuperer la fiche producteur
    $producteur = baz_valeurs_fiche($fiche['listefiche8producteur']);
    $placesrestantes = calculateFreePlaces($fiche);
    if ($GLOBALS['wiki']->UserIsOwner($fiche['id_fiche']) || $isProducteur || $GLOBALS['wiki']->UserIsAdmin()) {
      $entries = $GLOBALS['wiki']->services->get(EntryManager::class)->search(
        [
          'queries' => ['trajet' => $fiche['id_fiche']],
          'formsIds' => [6],
          'keywords' => '',
          'user' => '',
          'minDate' => '',
          'correspondance' => ''
        ],
        true, // filter on read ACL,
        true // use Guard
      );
      if (count($entries) == 0) {
        $output .= '<br><strong>Il n\'y a pas encore de personnes qui participent à ce trajet.</strong>';
      } else {
        $output .= '<br><strong>Liste des personnes qui participent à ce trajet</strong>';
        $output .= $GLOBALS['wiki']->Format('{{bazarliste id="6" query="trajet=' . $fiche['id_fiche'] . '" template="tableau" columnfieldsids=",bf_prenom,bf_nom,bf_telephone,bf_commentaire"}}');
      }
    } else {
      if ($placesrestantes < 1) {
        $output .= '<a class="disabled btn btn-primary" href="#">Trajet complet</a>';
      } else {
        $output .= '<p class="places"><strong>Nombres de places restantes</strong> : ' . $placesrestantes . '</p>';
        if ($status == 'Ouvert') {
          $output .= '<a class="btn-participe btn btn-primary" href="' . $GLOBALS['wiki']->href('', 'saisie-participants-trajet', 'trajet=' . $fiche['id_fiche'] . '&producteur=' . urlencode($producteur['id_fiche'])) . '"><i class="fa fa-plus"></i>&nbsp;Je profite de ce trajet</a>';
        } else {
          $output .=   '<a class="disabled btn btn-primary" href="#">Fermé</a>';
        }
      }
    }
    return $output;
  }
}