import dotenv from 'dotenv'
import { LokaliseApi } from '@lokalise/node-api'
import https from 'https'
import AdmZip from 'adm-zip'

dotenv.config()

const apiKey = process.env.LOKALISE_API_KEY
const project_id = process.env.LOKALISE_PROJECT
if (!apiKey) throw new Error('No API Key set for Lokalize! Set with "LOKALISE_API_KEY"')
if (!project_id) throw new Error('No project id set for Lokalize! Set with "LOKALISE_PROJECT"')
const client = new LokaliseApi({ apiKey })

const WGet = (url) =>
	new Promise((done) => {
		https
			.get(url, (res) => {
				const data = []
				res
					.on('data', (chunk) => {
						data.push(chunk)
					})
					.on('end', () => {
						let buffer = Buffer.concat(data)
						done(buffer)
					})
			})
			.on('error', (err) => {
				console.log('download error:', err)
			})
	})

async function download() {
	// For details see: https://app.lokalise.com/api2docs/curl/#transition-download-files-post
	const download = await client.files().download(project_id, {
		format: 'json',
		indentation: 'tab',
		json_unescaped_slashes: true,
		original_filenames: false,
		bundle_structure: '%LANG_ISO%.%FORMAT%',
		export_sort: 'first_added',
		export_empty_as: 'skip',
		add_newline_eof: true,
		replace_breaks: false,
	})
	const buffered = await WGet(download.bundle_url)
	const zip = new AdmZip(buffered)
	zip.extractAllTo('./locales', true)
}

download().catch((e) => {
	console.error(e)
	process.exit(1)
})