import { createSecretKey } from 'crypto';
import * as jose from 'jose';

const genKey = async () => {
  const privateKey = createSecretKey(process.env.SECRET_KEY as any);

  return privateKey;
};

export const createToken = async (userId: string) => {
  const token = await new jose.SignJWT({ uid: userId })
    .setProtectedHeader({ alg: process.env.ALGO as string })
    .setIssuedAt()
    .setExpirationTime('7d')
    .sign(await genKey());
  return token;
};

export const verifyToken = async (token: string) => {
  const privateKey = await genKey();
  const { payload } = await jose.jwtVerify(token, privateKey);
  return payload as { uid: string };
};

export const decodeToken = (token: string) => {
  const decoded = jose.decodeJwt(token);
  return decoded as { uid: string };
};
