
var fs = require('fs');
var cp = require('./us.clang.js');

//根据前端代码生成一个Guid的唯一文件，以供gcc编译。如果gcc支持编译内存流就不用生成文件了
//s代表了文件内容，f代表了文件名 type代表了文件类型
exports.createFileStream = function (res, s, f, type) {
    //c语言明确规定要后缀为.c。所以全部加后缀，不然可以省下一些代码。
    var _suf;//后缀
    switch (type) {
        case 'C': _suf = '.c'; break;
        case 'PHP': _suf = '.php'; break;
        case 'Net': _suf = '.cs'; break;
        case 'Python': _suf = '.py'; break;
        case 'Nodejs': _suf = '.js'; break;
        case 'Ruby': _suf = '.rb'; break;
        case 'Perl': _suf = '.pl'; break;
        case 'Lisp': _suf = '.lisp'; break;
        default: break;

    }
    var wstream = fs.createWriteStream('./output/userfiles/'+ f + _suf);//保存文件
    s = decodeURIComponent(s);
    wstream.write(s);
    // on Node.js older than 0.10, add cb to end()
    wstream.end(function () {
        //console.log('生成文件成功');//执行编译命令。
        switch (type) {
            case 'C': cp.exegcc(res, f, type); break;
            case 'PHP': cp.exephp(res, f, type); break;
            case 'Net': cp.exenet(res, f, type); break;
            case 'Python': cp.exepython(res, f, type); break;
            case 'Nodejs': cp.exenodejs(res, f, type); break;
            case 'Ruby': cp.exeruby(res, f, type); break;
            case 'Perl': cp.exeperl(res, f, type); break;
            case 'Lisp': cp.exelisp(res, f,type); break;
            default: break;
        }
    });
}
