'use strict';

const ffmpeg = require('fluent-ffmpeg');
const fs = require('fs-extra');

function mux(target, sources, item) {
    return new Promise((resolve, reject) => {
        return sources.reduce((acc, source) => {
            return acc.input(source);
        }, ffmpeg()).videoCodec('copy').audioCodec('copy').on('start', cmd => {
            console.log('\x1b[36m%s\x1b[0m', `Muxing ${sources.length} streams to '${target}'`);
        }).on('end', (stdout) => {
            console.log('\x1b[32m%s\x1b[0m', `Muxed and saved '${target}'`);

            resolve(stdout);
        }).on('error', error => reject).save(target);
    }).then(() => {
        return Promise.all(sources.map(source => {
            return fs.remove(source);
        })).then(() => {
            console.log('\x1b[36m%s\x1b[0m', `Cleaned up temporary files for '${target}'`);
        });
    });
};

module.exports = mux;