var FILE = require("lib/file");
var HTTP = require("lib/http");
var CONFIG = require("lib/config");
var SHELL = require("lib/shell");

var apiUrl = CONFIG.getValue("ApiUrl");
var token = null;
var versionId = 0;

if (FILE.fileExists("token.txt")) {
    token = FILE.readFile("token.txt", "utf-8");
}

if (FILE.fileExists("versionid.txt")) {
    versionId = parseInt(FILE.readFile("versionid.txt", "utf-8"));
}

var downloadFile = function(url) {
    // download a file
    console.log(SHELL.exec(["bin\\curl", url, "-o", "update.zip"]));

    // extract a file
    console.log(SHELL.exec(["bin\\unzip", "-o", "update.zip"]));

    // run installer
    SHELL.run(["start", "mysetup.exe"]);

    // close application
    exit();
};

var requestFile = function(id) {
    var onSuccess = function(res) {
        var data = res.data;
        var full_url = data.data.full_url;

        console.log("Downloading a file...");
        downloadFile(full_url);
    };

    console.log("Requesting a file...");
    HTTP.create()
        .setContentType("application/x-www-form-urlencoded")
        .setBearerAuth(token)
        .get(apiUrl + "/netsolid/files/" + id, onSuccess)
    ;
};

var checkUpdates = function() {
    if (!token) {
        console.warn("Could not find authorization token. 로그인이 필요합니다.");
    } else {
        var onSuccess = function(res) {
            var data = res.data;
            for (var i = 0; i < data.length; i++) {
                if (data[i].id > versionId) {
                    console.info("업데이트가 있습니다. 다운로드를 진행합니다.");
                    requestFile(data[i].file);
                }
            }
        };

        HTTP.create()
            .setContentType("application/x-www-form-urlencoded")
            .setBearerAuth(token)
            .setParameters({
                "status": "published",
                "sort": "-created_on",
                "limit": 1
            })
            .get(apiUrl + "/netsolid/items/updates", onSuccess)
        ;
    }
};

exports.checkUpdates = checkUpdates;