import { type JWTPayload, jwtVerify, SignJWT } from "jose";

const SECRET_KEY = process.env.JWT_SECRET || "your-secret-key";

export async function verifyToken(token: string): Promise<JWTPayload | null> {
	try {
		const { payload } = await jwtVerify(
			token,
			new TextEncoder().encode(SECRET_KEY),
		);
		return payload;
	} catch (error) {
		console.error("Token verification failed:", error);
		return null;
	}
}

export async function signToken(payload): Promise<string> {
	const iat = Math.floor(Date.now() / 1000);
	const exp = iat + 7 * 24 * 60 * 60; // 7 days expiration

	return new SignJWT({ ...payload })
		.setProtectedHeader({ alg: "HS256", typ: "JWT" })
		.setExpirationTime(exp)
		.setIssuedAt(iat)
		.setNotBefore(iat)
		.sign(new TextEncoder().encode(SECRET_KEY));
}
