const fs = require('fs');
const path = require('path');

const PROPERTIES_FILE_NAME = 'gradle.properties';
const PROP_GROUP = 'GROUP';
const PROP_DESCRIPTION = 'POM_DESCRIPTION';
const PROP_ARTIFACT_NAME = 'POM_NAME';
const PROP_ARTIFACT_ID = 'POM_ARTIFACT_ID';

const readProperties = (file) => fs.readFileSync(file, { encoding: 'utf-8' }, 'string')
    .split('\n')
    // filter-out empty lines
    .filter(s => s)
    .map(s => s.split('='))
    .reduce((a, s) => {
        a[s[0]] = s[1];
        return a;
    }, {});

const listDirectories = (folder) => fs.readdirSync(folder)
    .map(name => path.join(folder, name))
    .filter(f => fs.lstatSync(f).isDirectory());

const projectDir = path.resolve(__dirname, '../');

const projectProperties = readProperties(path.join(projectDir, PROPERTIES_FILE_NAME));

const projectGroup = projectProperties[PROP_GROUP]

const artifacts = listDirectories(projectDir)
    .map(dir => path.join(dir, PROPERTIES_FILE_NAME))
    .filter(f => fs.existsSync(f))
    .map(readProperties)
    .map(props => {
        return {
            id: props[PROP_ARTIFACT_ID],
            name: props[PROP_ARTIFACT_NAME],
            group: projectGroup,
            description: props[PROP_DESCRIPTION]
        }
    });

const artifactsFile = path.join(__dirname, '.vuepress', '.artifacts.js');
const artifactsJs = `
// this is a generated file, do not modify. To update it run 'collectArtifacts.js' script
const artifacts = ${JSON.stringify(artifacts)};
export { artifacts };
`

fs.writeFileSync(artifactsFile, artifactsJs);