import rules from 'modele-social'
import Engine from 'publicodes'
import { describe, expect, it } from 'vitest'
import { getNextQuestions } from '../source/components/utils/useNextQuestion'

describe('conversation', function () {
	it('should start with the first missing variable', function () {
		const missingVariables = new Engine({
			// TODO - this won't work without the indirection, figure out why
			top: 'oui',
			'top . startHere': { formule: { somme: ['a', 'b'] } },
			'top . a': { question: '?', titre: 'a', unité: '€' },
			'top . b': { question: '?', titre: 'b', unité: '€' },
		}).evaluate('top . startHere').missingVariables
		expect(getNextQuestions(missingVariables)[0]).to.equal('top . a')
	})
	it('should first ask for questions without defaults, then those with defaults', function () {
		const engine = new Engine({
			net: { formule: 'brut - cotisation' },
			brut: {
				question: 'Quel est le salaire brut ?',
				unité: '€/an',
			},
			cotisation: {
				formule: {
					produit: {
						assiette: 'brut',
						variations: [
							{
								si: 'cadre',
								alors: {
									taux: '77%',
								},
							},
							{
								sinon: {
									taux: '80%',
								},
							},
						],
					},
				},
			},
			cadre: {
				question: 'Est-ce un cadre ?',
			},
		})

		expect(
			getNextQuestions(engine.evaluate('net').missingVariables)[0]
		).to.equal('brut')

		engine.setSituation({
			brut: 2300,
		})

		expect(
			getNextQuestions(engine.evaluate('net').missingVariables)[0]
		).to.equal('cadre')
	})

	it('should ask "motif CDD" if "CDD" applies', function () {
		const result = Object.keys(
			new Engine(rules)
				.setSituation({
					salarié: 'oui',
					'salarié . contrat . CDD': 'oui',
					'salarié . contrat . salaire brut': '2300',
				})
				.evaluate('salarié . rémunération . net . à payer avant impôt')
				.missingVariables
		)

		expect(result).to.include('salarié . contrat . CDD . motif')
	})
})