const jwt = require("jsonwebtoken");
const { query } = require('../mods/dbconnection');
const config = require("../conf/config.json");

const {
    secret: tokenSecret,
} = require("../conf/config.json").secure.jwt;

const workerOrAuthMiddleware = async (req, res, next) => {
    try{
        const loginType = req.body.loginType;

        if(loginType == 'standardUser'){
            // 유저 로그인
            const token = req.cookies.auth_token;
            
            if (!token) {
                return res.status(401).json({
                    ok: false,
                    message: "토큰이 없습니다.",
                });
            }

            const decoded = jwt.verify(token, tokenSecret);

            req.user = decoded;

            next();
        } else if(loginType == 'worker'){
            // 작업자 로그인
            const userId = req.body.userId;

            const lastUserLog = await query(
                `SELECT user_id, eqpt_id, op_type, reg_dt
                    FROM \`${config.dbName.boas_se}\`.tb_user_eqpt
                    WHERE user_id = ?
                    ORDER BY reg_dt DESC
                    LIMIT 1`,
                [userId]
            );

            if (lastUserLog.length === 0) {
                return res.status(401).json({
                    ok: false,
                    message: "로그인 정보가 없습니다.",
                });
            }

            const log = lastUserLog[0];

            if (log.op_type === 'LOGIN') {
                next();
            }else{
                return res.status(401).json({
                    ok: false,
                    message: "로그인 정보가 없습니다.",
                });
            }
        } else{
            return res.status(401).json({
                ok: false,
                message: "로그인 정보가 잘못되었습니다.",
            });
        }
    } catch(err){
        console.log(err);
        return res.status(401).json({
            ok: false,
            msg: "인증되지 않았습니다.",
        });
    }
};

module.exports = workerOrAuthMiddleware;