const { spawnSync } = require('node:child_process');
const fs = require('node:fs');
const path = require('node:path');
const TestConfig = require('../test.config');
const { AlfrescoApi, NodesApi, UploadApi } = require('@alfresco/js-api');

function buildNumber() {
    let buildNumber = process.env.GH_BUILD_NUMBER;
    if (!buildNumber) {
        process.env.GH_BUILD_NUMBER = Date.now();
    }

    return process.env.GH_BUILD_NUMBER;
}

async function uploadScreenshot(retryCount, suffixFileName) {
    console.log(`Start uploading report ${retryCount}`);

    const alfrescoJsApi = new AlfrescoApi({
        provider: 'ECM',
        hostEcm: TestConfig.screenshot.url
    });

    const nodesApi = new NodesApi(alfrescoJsApi);
    const uploadApi = new UploadApi(alfrescoJsApi);

    await alfrescoJsApi.login(TestConfig.users.screenshot.username, TestConfig.users.screenshot.password);

    let folderNode;

    try {
        folderNode = await nodesApi.createNode(
            '-my-',
            {
                name: `retry-${retryCount}`,
                relativePath: `Builds/${buildNumber()}/`,
                nodeType: 'cm:folder'
            },
            {},
            {
                overwrite: true
            }
        );
    } catch (error) {
        folderNode = await nodesApi.getNode('-my-', {
            relativePath: `Builds/${buildNumber()}/retry-${retryCount}`
        });
    }

    suffixFileName = suffixFileName.replace(/\//g, '-');

    fs.renameSync(
        path.resolve(__dirname, '../../e2e-output/'),
        path.resolve(__dirname, `../../e2e-output-${retryCount}-${process.env.GH_ACTION_RETRY_COUNT}/`)
    );

    spawnSync(` tar -czvf ../e2e-result-${suffixFileName}-${retryCount}.tar .`, {
        cwd: path.resolve(__dirname, `../../e2e-output-${retryCount}-${process.env.GH_ACTION_RETRY_COUNT}/`),
        shell: false
    });

    const pathFile = path.join(__dirname, `../../e2e-result-${suffixFileName}-${retryCount}.tar`);
    const file = fs.createReadStream(pathFile);

    await uploadApi.uploadFile(file, '', folderNode.entry.id, null, {
        name: `e2e-result-${suffixFileName}-${retryCount}.tar`,
        nodeType: 'cm:content',
        autoRename: true
    });
}

module.exports = {
    uploadScreenshot: uploadScreenshot
};