const axios = require('axios').default;
const { ordenarListaImagensETags } = require('../ordenacaoVersoes');
const argv = require('process').argv;

async function obterNumeroPaginas(url, token) {
    const resposta = await axios.get(url, {
        headers: {
            'PRIVATE-TOKEN': token
        }
    });

    return resposta.headers['x-total-pages'];
}

async function listarPorPagina(url, pagina, token) {
    const resposta = await axios.get(`${url}?page=${pagina}`, {
        headers: {
            'PRIVATE-TOKEN': token
        }
    });

    return resposta.data;
}

function obterListaDeVersoesParaApresentacao(listaImagensETags) {
    const listaFinal =  "master\n" + ordenarListaImagensETags(listaImagensETags).map(e => e.name).join("\n");
    return listaFinal;
}
async function main() {
    const token = argv.length >= 3 ? argv[2] : null;

    if (token == null) {
        console.error('token nao informado');
        return;
    }

    const tagsUrl = 'https://gitlab.microuniverso.com.br/api/v4/projects/90/repository/tags';
    

    const numeroPaginasTags = await obterNumeroPaginas(tagsUrl, token);


    const totalPaginasTags = Math.min(numeroPaginasTags, 2);


    const promessasTags = [];

    for (let pagina = 1; pagina <= totalPaginasTags; pagina++) {
        promessasTags.push(listarPorPagina(tagsUrl, pagina, token));
    }

    const [tags] = await Promise.all([
        Promise.all(promessasTags),
    ]);

    let listaImagensETags = tags.flat();

    const listaFinal = [...listaImagensETags];

    return obterListaDeVersoesParaApresentacao(listaFinal);
}

main().then(lista => {
    if (lista != null) {
        console.log(lista);
    }
});
