import { createParamDecorator, ExecutionContext, UnauthorizedException } from "@nestjs/common";
import type { Request } from "express";
import type { ApiKeyAuthContext, AuthContext } from "./auth.types";

export const Auth = createParamDecorator((_data: unknown, ctx: ExecutionContext): AuthContext => {
  const req = ctx.switchToHttp().getRequest<Request>();
  if (!req.auth) throw new UnauthorizedException("No auth context");
  return req.auth;
});

export const MerchantAuth = createParamDecorator(
  (_data: unknown, ctx: ExecutionContext): ApiKeyAuthContext => {
    const req = ctx.switchToHttp().getRequest<Request>();
    if (!req.auth || req.auth.kind !== "api_key") {
      throw new UnauthorizedException("Requires merchant API key");
    }
    return req.auth;
  },
);
