var http      = require('http'),
    https     = require('https'),
    fs        = require('fs'),
    net       = require('net'),
    url       = require('url'),
    exec      = require('child_process').exec,
    serverMgr = require("./lib/serverMgr");

var serverMgrInstance = new serverMgr();

var httpProxyServer = http.createServer(function (req, res) {
    var urlPattern = url.parse(req.url);
    var options = {
        hostname: urlPattern.host,
        port: urlPattern.port || 80,
        path: urlPattern.path,
        method: req.method,
        headers:req.headers
    };

    var directReq = http.request(options,function(directRes){
        res.writeHead(directRes.statusCode , directRes.headers);
        directRes.pipe(res);
    });

    directReq.on("error",function(e){
        console.log("err with request :" + req.url);
        res.end();
    });

    directReq.end();
});

//connect method for HTTPS over http
httpProxyServer.on('connect', function(req, socket, head){
    var hostname = req.url.split(":")[0];

    //forward the https-request to local https server
    serverMgrInstance.fetchPort(hostname,function(err,port){
        if(!err && port){
            try{
                var conn = net.connect(port, 'localhost', function(){
                    socket.write('HTTP/' + req.httpVersion + ' 200 OK\r\n\r\n', 'UTF-8', function() {
                        conn.pipe(socket);
                        socket.pipe(conn);
                    });
                });     
            }catch(e){
                console.log("err --");//TODO 
            }
            
        }else{
            console.log("err fetch HTTPS server for host:" + hostname);
        }
    });
});

httpProxyServer.listen(8001);