/**
 * Génère le calendrier, le select, la légende et les styles pour les congés
 * 
 * @param int $id : l'ID du collaborateur dont on désire les congés
 * @return array : contient chaque morceau généré : style, select, recap et calendrier
 */
function generer_calendrier($id, $mois, $annee)
{
    $retour = array();
    /*
     * préparation de la liste des types d'absence, des styles et du select et du tableau
     */
    $type_absences = array();
    $result_type_absence = $GLOBALS['connexion']->query("SELECT * FROM TYPE_ABSENCE");
    $retour['select'] = 'Choix du type de congés<br /><select name="type">';
    $retour['style'] = '';
    $retour['recap'] = '<table border="1"><thead><tr><th>type</th><th style="width:70px;">Validé</th><th style="width:70px;">Demandé</th></tr></thead><tbody>';
    while ($row = $result_type_absence->fetch_assoc()) {
        $nom = str_replace(' ', '', $row['TYA_LIBELLE']);
        $type_absences[$row['TYA_NO']] = array('nom' => $nom, 'valide' => $row['TYA_COULEUR'], 'demande' => $row['TYA_COULEUR_DEM']);
        $retour['style'] .= ecrire_style($nom, $row['TYA_COULEUR_DEM']);
        $retour['style'] .= ecrire_style($nom . '-valid', $row['TYA_COULEUR']);
        $retour['select'] .= option($nom, $row['TYA_LIBELLE']);
        $retour['recap'] .= ajout_row_conge($row['TYA_LIBELLE'], $nom);
    }
    $retour['select'] .= '</select>';
    $retour['recap'] .= '</tbody></table>';
    /*
     * récupération de la liste des congés validés ou non pour la période donnée
     */
    $conges = array();
    $query = "SELECT TYA_NO, ABS_JOUR, ABS_NBH, ABS_VALIDATION FROM ABSENCE WHERE ABS_MOIS = '" . $mois . "' AND ABS_ANNEE = '" . $annee . "' AND COL_NO = '" . $id . "' AND ABS_ETAT != 3";
    $result = $GLOBALS['connexion']->query($query);
    while ($row = $result->fetch_assoc()) {
        $conges[$row['ABS_JOUR']] = $type_absences[$row['TYA_NO']]['nom'];
        $conges[$row['ABS_JOUR']] .= $row['ABS_VALIDATION'] ? '-valid' : '';
        $conges[$row['ABS_JOUR']] .= $row['ABS_NBH'] == 1 ? '' : '-b';
    }
    /*
     * préparation du tableau des jours
     */
    $semaine = 1;
    //nombre de semaine dans un mois
    $table = array();
    //table du mois
    $nbjoursMois = nbjoursMois($mois, $annee);
    //connaitre le nb de jours dans le mois
    $jour = jour_semaine($mois, 1, $annee);
    //connaitre le jour du premier du mois
    $feries = getFeriesAnnee($annee);
    for ($i = 1; $i <= $nbjoursMois; $i++) {
        switch (true) {
            case isset($conges[$i]):
                $table[$semaine][$jour]['classe'] = $conges[$i];
                $table[$semaine][$jour]['classe'] .= strpos($conges[$i], 'valid') === false ? ' clickable' : '';
                break;
            case in_array(mktime(0, 0, 0, $mois, $i, $annee), $feries):
                $table[$semaine][$jour]['classe'] = 'feries';
                break;
            case $jour == 6:
                $table[$semaine][$jour]['classe'] = 'samedi';
                break;
            case $jour == 7:
                $table[$semaine][$jour]['classe'] = 'dimanche';
                break;
            default:
                $table[$semaine][$jour]['classe'] = 'clickable';
                break;
        }
        $table[$semaine][$jour]['valeur'] = $i;
        if ($jour == 7) {
            $jour = 0;
            $semaine++;
        }
        $jour++;
    }
    $retour['calendrier'] = generer_tableau($table);
    return $retour;
}
function getFeries($timestampStart)
{
    return getFeriesAnnee(date('Y', $timestampStart));
}