export interface DecodedJWT {
  Email: string;
  exp: number;
  iat: number;
}

// Server-compatible Base64 decode
function base64UrlDecode(str: string): string {
  let base64 = str.replace(/-/g, "+").replace(/_/g, "/");

  while (base64.length % 4) {
    base64 += "=";
  }

  if (typeof Buffer !== "undefined") {
    // Node.js environment
    return Buffer.from(base64, "base64").toString("utf-8");
  } else {
    // Browser environment
    return decodeURIComponent(
      atob(base64)
        .split("")
        .map((c) => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2))
        .join("")
    );
  }
}

export function verifyToken(
  token: string
): { payload: DecodedJWT; expired: boolean } | null {
  try {
    const parts = token.split(".");

    if (parts.length !== 3) {
      return null;
    }

    const payloadBase64 = parts[1];
    const payloadJson = base64UrlDecode(payloadBase64);
    const payload = JSON.parse(payloadJson) as DecodedJWT;

    // Check token expiration
    const currentTime = Math.floor(Date.now() / 1000);
    const expired = payload.exp ? currentTime > payload.exp : false;

    return { payload, expired };
  } catch (error) {
    console.error("JWT decode error:", error);
    return null;
  }
}
