import R from 'ramda'
import {splitName, joinName} from './rules'


let evaluateBottomUp = situationGate => startingFragments => {
	let rec = (parentFragments, childFragments=[]) =>
		parentFragments.length == 0 ? null
		: ( do {
				let query = joinName(parentFragments),
					expectedResult = ( R.isEmpty(childFragments) ? 'oui' : joinName(childFragments) )

				situationGate(query) == null ?
					rec(
						R.dropLast(1)(parentFragments),
						[ R.last(parentFragments), ...childFragments]
					)
				: situationGate(query) == expectedResult
		})
	return rec(startingFragments)
}


/* Evalue la valeur d'une variable
en utilisant la fonction situationGate qui donne accès à la situation courante*/
export let evaluateVariable = (situationGate, variableName, rule) => {
	// test rec
	let value = situationGate(variableName)

	return rule.format != null ?
			value
		: !rule.formule ?
				// c'est une variante, eg. motifs . classique . accroissement d'activité
				evaluateBottomUp(situationGate)(splitName(variableName))
			: rule.formule['une possibilité'] ?
					evaluateBottomUp(situationGate)(splitName(variableName))
				: value
}