import type { NextFunction, Request, Response } from "express";
import { verifyAccessToken } from "../config/jwt.js";

export const authMiddleware = (req: Request, res: Response, next: NextFunction): void => {
  const authHeader = req.headers.authorization;

  if (!authHeader || !authHeader.startsWith("Bearer ")) {
    res.status(401).json({ message: "Authorization token is required." });
    return;
  }

  const token = authHeader.split(" ")[1];

  try {
    const payload = verifyAccessToken(token as string);

    const normalizedId = payload.id ?? payload.userId;
    if (normalizedId === undefined || normalizedId === null) {
      res.status(401).json({ message: "Invalid token payload: user id is missing." });
      return;
    }

    req.user = {
      ...payload,
      id: normalizedId,
    };
    next();
  } catch (error) {
    res.status(401).json({ message: error instanceof Error ? error.message : "Unauthorized" });
  }
};
