// We publish our job offers on https://beta.gouv.fr/recrutement/. To augment
// their reach, we also publish a banner on our website automatically by using
// the beta.gouv.fr API.
import { promisify } from 'util'

import dotenv from 'dotenv'
import { parseString } from 'xml2js'

import { createDataDir, writeInDataDir } from './utils.js'

dotenv.config()

const parseXML = promisify(parseString)

createDataDir()
const jobOffers = await fetchJobOffers()
writeInDataDir('job-offers.json', jobOffers)

async function fetchJobOffers() {
	let jobOffers = []

	try {
		const response = await fetch('https://beta.gouv.fr/jobs.xml')
		const content = await response.text()

		// The XML API isn't the most ergonomic, we ought to have a JSON API.
		// cf. https://github.com/betagouv/beta.gouv.fr/issues/6343
		const xml = await parseXML(content)

		jobOffers = xml.feed.entry
			.map((entry) => ({
				title: entry.title[0]['_'].trim(),
				link: entry.link[0].$.href,
				content: entry.content[0]['_'].trim(),
			}))
			.filter(({ title }) => title.includes('Offre de Mon-entreprise'))
			.map(({ title, ...rest }) => ({
				...rest,
				title: title.replace(' - Offre de Mon-entreprise', ''),
			}))
	} catch (err) {
		console.error('Beta.gouv.fr/jobs error : ')
		console.error(err)
	}

	return jobOffers
}