import jwt from "jsonwebtoken";
import { config } from "../configs/config";
import { IJwtLoginPayload } from "@common/interfaces/jwt-payload.interface";

export class JwtHelper {
  static generateToken(payload: IJwtLoginPayload) {
    return jwt.sign(payload, config.jwt.secret, {
      expiresIn: config.jwt.expiresIn,
    });
  }

  static verifyToken(role: any) {
    return (req: any, res: any, next: any) => {
      let authHeader = req.headers["authorization"];
      const token = authHeader && authHeader.split(" ")[1];
      if (!token) {
        return res
          .status(401)
          .json({ success: false, code: 401, message: "Unauthorized" });
      }
      jwt.verify(token, config.jwt.secret, (err: any, tokenData: any) => {
        if (err)
          return res
            .status(403)
            .json({ success: false, code: 403, message: "Invalid Token!" });
        if (!role.includes(tokenData.role))
          return res
            .status(401)
            .json({ success: false, code: 401, message: "Unauthorized" });
        req.tokenData = tokenData;
        next();
      });
    };
  }
}