const fs = require('fs');
const request = require('sync-request');
const jimp = require('jimp');
const https = require('https');

function loadUsernames(path) {
    if (!fs.existsSync(path)) {
        console.log(`ERROR: there is no ${path}`);
        process.exit();
    }
    let text = fs.readFileSync(path).toString();
    let out = [];
    text.split('\n').forEach((line) => {
        out.push(line.replace(/\r/, ''));
    });
    return out;
}

function getFaces(usernames) {
    usernames.forEach((username) => {
        https.get(`https://api.mojang.com/users/profiles/minecraft/${username}`, (uuid_resp) => {
            let uuid_data = '';
            uuid_resp.on('data', (chunk) => {
                uuid_data += chunk;
            });
            uuid_resp.on('end', () => {
                if (uuid_data) {
                    let uuid = JSON.parse(uuid_data).id;
                    https.get(`https://sessionserver.mojang.com/session/minecraft/profile/${uuid}`, (img_resp) => {
                        let img_data = '';
                        img_resp.on('data', (chunk) => {
                            img_data += chunk;
                        });
                        img_resp.on('end', () => {
                            let res = JSON.parse(img_data);
                            let link = JSON.parse(Buffer.from(res.properties[0].value, 'base64').toString('ascii')).textures.SKIN.url;
                            jimp.read(link, function (err, lenna) {
                                if (err) throw err;
                                lenna.crop(8,8,8,8)  
                                     .resize(256, jimp.AUTO, jimp.RESIZE_NEAREST_NEIGHBOR)     
                                     .write(`images/${username}.png`);
                                console.log(`${username}'s skin cropped successfully`);
                            });
                        });
                    }).on("error", (err) => {
                        console.log(`ERROR: Couldn't get ${username}'s skin!`);
                    });
                }
                else {
                    console.log(`ERROR: Couldn't get ${username}'s UUID!`);
                }
            });
        }).on("error", (err) => {
            console.log(`ERROR: Couldn't get ${username}'s UUID!`);
        });
    });
}

let usernames = loadUsernames('names.txt');
getFaces(usernames);

