<?php

/**
 * Utilisations de pipelines
 *
 * @package SPIP\Compagnon\Pipelines
 */

if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

/**
 * Ajoute les aides du compagnon sur le pipeline affiche milieu
 *
 * @pipeline affiche_milieu
 *
 * @param array $flux
 *     Données du pipeline
 * @return array
 *     Données du pipeline
 */
function compagnon_affiche_milieu($flux) {
	return compagnonage($flux, 'affiche_milieu');
}

/**
 * Ajoute les aides du compagnon sur le pipeline affiche gauche
 *
 * @pipeline affiche_gauche
 *
 * @param array $flux
 *     Données du pipeline
 * @return array
 *     Données du pipeline
 */
function compagnon_affiche_gauche($flux) {
	return compagnonage($flux, 'affiche_gauche');
}

/**
 * Ajoute les aides du compagnon sur le pipeline affiche droite
 *
 * @pipeline affiche_droite
 *
 * @param array $flux
 *     Données du pipeline
 * @return array
 *     Données du pipeline
 */
function compagnon_affiche_droite($flux) {
	return compagnonage($flux, 'affiche_droite');
}

/**
 * Ajoute l'aide du compagnon dans un pipeline
 *
 * Les aides sont ajoutées
 * - si la config le permet
 * - si l'aide n'a pas déjà été validée par le visiteur
 *
 * @pipeline_appel compagnon_messages
 *
 * @param array $flux
 *    Flux d'informations transmises au pipeline
 * @param string $pipeline
 *    Nom du pipeline d'origine
 * @return array
 *    Le flux éventuellement complété de l'aide du compagnon
 */
function compagnonage($flux, $pipeline) {

	// pas de compagnon souhaite ?
	include_spip('inc/config');
	if (lire_config('compagnon/config/activer') == 'non') {
		return $flux;
	}

	$moi = $GLOBALS['visiteur_session'];
	$deja_vus = lire_config('compagnon/' . $moi['id_auteur']);

	// si cet auteur ne veut rien voir… bah… pas la peine de continuer
	if (isset($deja_vus['all']) and $deja_vus['all']) {
		return $flux;
	}

	$flux['args']['pipeline'] = $pipeline;
	$flux['args']['deja_vus'] = $deja_vus;
	$aides = pipeline('compagnon_messages', [
		'args' => $flux['args'],
		'data' => [],
	]);

	if (!$aides) {
		return $flux;
	}

	$ajouts = '';

	foreach ($aides as $aide) {
		// restreindre l'affichage par statut d'auteur
		$ok = true;
		if (isset($aide['statuts']) and $statuts = $aide['statuts']) {
			$ok = false;
			if (!is_array($statuts)) {
				$statuts = [$statuts];
			}
			if (in_array('webmestre', $statuts) and ($moi['webmestre'] == 'oui')) {
				$ok = true;
			} elseif (in_array($moi['statut'], $statuts)) {
				$ok = true;
			}
		}

		// si c'est ok, mais que l'auteur a deja lu ca. On s'arrete.
		if ($ok and is_array($deja_vus) and isset($deja_vus[$aide['id']]) and $deja_vus[$aide['id']]) {
			$ok = false;
		}

		if ($ok) {
			// demande d'un squelette
			if (isset($aide['inclure']) and $inclure = $aide['inclure']) {
				unset($aide['inclure']);
				$ajout = recuperer_fond($inclure, array_merge($flux['args'], $aide), ['ajax' => true]);
			} // sinon les textes sont fournis
			else {
				$ajout = recuperer_fond('compagnon/_boite', $aide, ['ajax' => true]);
			}

			$ajouts .= $ajout;
		}
	}

	// ajout de nos trouvailles
	if ($ajouts) {
		$twinkle = find_in_path('prive/javascript/jquery.twinkle.js');
		$ajouts .= <<<JS
<script>
jQuery.getScript('$twinkle',function(){
	jQuery(function(){
		var options = {
			"effect": "drop",
			"effectOptions": {
				"color": "rgba(255,96,96,1)",
				"radius": 50
			}
		};
		jQuery('.compagnon .target').each(function(){
			var target = jQuery(this).attr('data-target');
			var delay = 0;
			jQuery(this).mousemove(function(){
				if (!delay) {
					delay=1; setTimeout(function(){delay=0;}, 800);
					jQuery(target).twinkle(options);
				}
			});
		});
	});
});
</script>
JS;

		$flux['data'] = $ajouts . $flux['data'];
	}

	return $flux;
}
