import jwt from "jsonwebtoken";
import type { StringValue } from "ms";

export interface JwtPayload {
    id: number | string;
    userId?: number | string;
    name?: string;
    email?: string;
    roleId?: number | string;
    role?: string;
}

const JWT_SECRET = process.env.JWT_SECRET || "dev-secret";
const JWT_EXPIRES_IN = process.env.JWT_EXPIRES_IN || "1h";

export const generateAccessToken = (payload: JwtPayload): string => {
    return jwt.sign(payload, JWT_SECRET, {
        expiresIn: JWT_EXPIRES_IN as StringValue,
    });
};

export const verifyAccessToken = (token: string): JwtPayload => {
    try {
        return jwt.verify(token, JWT_SECRET) as JwtPayload;
    } catch {
        throw new Error("Invalid or expired access token.");
    }
};