import test from 'ava';
import {join} from 'node:path';

import {getOdtTemplate} from '../../scripts/odf/odtTemplate-forNode.js'

import {fillOdtTemplate, getOdtTextContent} from '../../exports.js'


test('basic template filling with {#if}{:else} - then branch', async t => {
    const templatePath = join(import.meta.dirname, '../fixtures/description-nombre.odt')
    const templateContent = `Description du nombre {n}

{#if n<5}
n est un petit nombre
{:else}
n est un grand nombre
{/if}
`

    const odtTemplate = await getOdtTemplate(templatePath)
    const templateTextContent = await getOdtTextContent(odtTemplate)
    t.deepEqual(templateTextContent, templateContent, 'reconnaissance du template')

    // then branch
    const odtResult3 = await fillOdtTemplate(odtTemplate, {n: 3})
    const odtResult3TextContent = await getOdtTextContent(odtResult3)
    t.deepEqual(odtResult3TextContent, `Description du nombre 3

n est un petit nombre
`)


});


test('basic template filling with {#if}{:else} - else branch', async t => {
    const templatePath = join(import.meta.dirname, '../fixtures/description-nombre.odt')
    const templateContent = `Description du nombre {n}

{#if n<5}
n est un petit nombre
{:else}
n est un grand nombre
{/if}
`

    const odtTemplate = await getOdtTemplate(templatePath)
    const templateTextContent = await getOdtTextContent(odtTemplate)
    t.deepEqual(templateTextContent, templateContent, 'reconnaissance du template')
    
    try{
    // else branch
    const odtResult8 = await fillOdtTemplate(odtTemplate, {n: 8})
    const odtResult8TextContent = await getOdtTextContent(odtResult8)
    t.deepEqual(odtResult8TextContent, `Description du nombre 8

n est un grand nombre
`)
    }
    catch(e){console.error(e); throw e}


});


test('complex structured if', async t => {
    const templatePath = join(import.meta.dirname, '../fixtures/left-branch-content-and-two-consecutive-ifs.odt')
    const templateContent = `Utilisation de sources lumineuses : {#if scientifique.source_lumineuses}Oui{:else}Non{/if}
{#if scientifique.source_lumineuses && scientifique.modalités_source_lumineuses }
Modalités d’utilisation de sources lumineuses : {scientifique.modalités_source_lumineuses}
{/if}
`

    const data = {
        scientifique: {
            source_lumineuses: false,
            //modalités_source_lumineuses: 'lampes torches'
        }
    }


    const odtTemplate = await getOdtTemplate(templatePath)
    const templateTextContent = await getOdtTextContent(odtTemplate)
    t.deepEqual(templateTextContent.trim(), templateContent.trim(), 'reconnaissance du template')

    const odtResult = await fillOdtTemplate(odtTemplate, data)
    const odtResultTextContent = await getOdtTextContent(odtResult)
    t.deepEqual(odtResultTextContent.trim(), `Utilisation de sources lumineuses : Non`)

});

