const sleepTime = 0; // 模拟弱网环境等待时间

// 1. 导入http模块
const http = require("http");
var url = require("url");

// 2. 创建一个web服务器对象
const server = http.createServer();

// 3. 监听请求事件
server.on("request", async (req, res) => {
    //req-->request 请求对象, res-->response 响应对象
    // 通过响应头设置返回前台数据格式及编码。(解决中文乱码的问题)
    // res.setHeader('Content-Type', 'text/html;charset=utf-8');
    //res.write()表示向客户端输出的方法
    // res.write("hello world,你好nodejs")

    let urlObj = url.parse(req.url, true);
    let query = urlObj.query;

    res.setHeader('Content-Type', 'text/json;charset=utf-8');

    let result = {};
    if (req.url.startsWith('/user/login')) {
        result = {
            success: true,
            msg: "登录成功",
            data: {
                userInfo: {
                    "id": 1,
                    "username": "root",
                    "realname": "真实姓名",
                    "idNumber": null,
                    "phoneNumber": null,
                    "role": 1,
                    "buildingId": null,
                    "doorplate": null,
                    "permission": "0",
                    "permissionTime": null
                }
            }
            // success: false,
            // msg: "用户名或密码不正确",
            // data: null
        };
    } else if (req.url.startsWith('/access/getCodeInfo')) {
        result = {
            success: true,
            msg: "成功",
            data: {
                id: query.id,
                qrcodeColor: "green",
                infoText: "绿码 请通行",
                infoTextColor: "green",
                // qrcodeColor: "red",
                // infoText: "红码 禁止通行",
                // infoTextColor: "red",
            }
            // success: false,
            // msg: "用户名或密码不正确",
            // data: null
        };
    } else {
        result = {
            success: false,
            msg: "服务器内部错误",
            data: null,
            extra: {
                url: req.url,
                query: query,
                urlObj: urlObj,
                method: req.method,
                headers: req.headers,
                req: Object.keys(req),
                res: Object.keys(res)
            }
        };
    }
    res.write(JSON.stringify(result));

    // 模拟弱网等待时间
    await new Promise((resolve) => {
        setTimeout(resolve, sleepTime);
    })

    //res.end()每次响应完,需要调用此方法 来结束响束
    res.end();
    console.log(new Date(), "req.url", req.url);
})

// 4. 监听端口,为了避免端口冲突,这里给一个本机端口
server.listen(80, () => {
    let baseUrl = 'http://localhost:80';
    console.log(`服务启动成功: ${baseUrl}/`);
    console.log();
    console.log(`${baseUrl}/user/login`);
    console.log(`${baseUrl}/access/getCodeInfo`);
})