<?php
//Récupérer la liste complete des villes
function getListeVilles($db) {
    $result = pg_query($db, "SELECT * FROM Ville;");
    return $result;
}

//Créer un trajet en bd
function creerTrajet($db, $mail, $dateDepart, $datArrivee, $matricule){
    $date = date('Y-m-d H:i:s');
    $result = pg_query_params($db, "INSERT INTO Trajet (datedepart, datearrivee, dateproposition, estannule, mailproposition, matricule) VALUES ($1, $2, $3, false, $4, $5) RETURNING codeTrajet;", array($dateDepart,$datArrivee, $date, $mail, $matricule));
    return $result;
}

//Creer les étapes d'un trajet
function creerEtapes($db, $codeTrajet, $etapes){
    $result = true;
    for ($i=0; $i<count($etapes) && $result; $i++){
        $arr = explode("%%", $etapes[$i]);
        $result = pg_query_params($db, "INSERT INTO traverser (codetrajet, nomville, codepostal, numeroetape) VALUES ($1, $2, $3, $4);", array($codeTrajet, $arr[0], $arr[1], $i+1));
    }
    return $result;
}

//Vérifier la cohérence des dates
function checkDates($db, $mail, $dateDepart, $dateArrivee) {
    $valide = $dateDepart < $dateArrivee && $dateDepart > date('Y-m-d H:i:s');
    $result = pg_query_params($db, "SELECT COUNT(*) From Trajet WHERE mailproposition = $1 AND $2 BETWEEN datedepart AND datearrivee;", array($mail, $dateDepart));
    $row = pg_fetch_array($result);
    return $row[0] == 0 && $valide;
}

//Vérifier que l'utilisateur est bien associé à cette voiture
function checkVoiture($db, $mail, $matricule){
    $result = pg_query_params($db, "SELECT matricule From Voiture WHERE mail = $1  AND matricule = $2;", array($mail, $matricule));
    $row = pg_fetch_array($result);
    return !strcmp($matricule, $row[0]);
}

function getTrajetsProposes($db, $mail){
    $result = pg_query_params($db, "SELECT COUNT(*) from Trajet WHERE mailProposition = $1 AND estAnnule = false AND datedepart >= current_date;", array($mail));
    if ($result) {
        $row = pg_fetch_array($result);
        return $row[0];
    }
    return 0;
}

function getTrajetsReserves($db, $mail){
    $result = pg_query_params($db, "SELECT COUNT(*) FROM trajet tr, reserver r WHERE r.codetrajet = tr.codetrajet AND mailutilisateur = $1 AND etatres != 'Annulée' AND estAnnule = false AND datedepart >= current_date;", array($mail));
    if ($result) {
        $row = pg_fetch_array($result);
        return $row[0];
    }
    return 0;
}

function getMessagesNonLus($db, $mail){
    $result = pg_query_params($db, "SELECT COUNT(*) from Message WHERE mailRecepteur = $1 AND estLu = FALSE;", array($mail));
    if ($result) {
        $row = pg_fetch_array($result);
        $login = $row[0];
        return $login;
    }
}

function getAvisNonLus($db, $mail){
    global $db;
    $result = pg_query_params($db, "SELECT COUNT(tr.mailProposition) FROM Trajet tr, Avis av WHERE tr.codeTrajet = av.codeTrajet AND av.estLu = false AND tr.mailProposition = $1;", array($mail));
    if ($result) {
        $row = pg_fetch_array($result);
        $login = $row[0];
        return $login;
    }
}

//Récupérer la liste des voitures concernant un utilisateur
function getListeVoitures($db, $mail){
    $result = pg_query_params($db, "SELECT * FROM Voiture WHERE mail = $1;", array($mail));
    return $result;
}

//Afficher les voitures dans un select
function afficherVoitures($db, $mail){
  $voitures = getListeVoitures($db, $mail);
  while ($row = pg_fetch_array($voitures)) {
    $modele = $row['modele'];
    $matricule = $row['matricule'];
    echo "<option value='$matricule'>$modele</option>";
  }
}

//Afficher les voitures dans un select
function afficherVilles($db){
  $villes = getListeVilles($db);
  while ($row = pg_fetch_array($villes)) {
    $nom = $row['nomville'];
    $cp = $row['codepostal'];
    echo "<option value='$nom%%$cp'>$nom ($cp)</option>";
  }
}

function getErrorDepotTrajet($code){
  switch ($code) {
    case 1:
      return "Erreur lors de la vérification des étapes.";
    case 2:
      return "Erreur lors de la vérification des dates.";
    case 3:
      return "Ce compte n'est pas associé à la voiture sélectionnée.";
    case 4:
      return "Erreur lors de l'enregistrement du trajet.";
  }
}
?>
