import { createParamDecorator, ExecutionContext } from '@nestjs/common';

/**
 * User 데코레이터
 *
 * @description
 * JWT 인증 후 Request 객체에서 사용자 정보를 추출하는 데코레이터입니다.
 * @Req() req 대신 사용하여 더 간결하게 사용자 정보를 가져올 수 있습니다.
 *
 * @example
 * // 전체 사용자 정보 가져오기
 * @Get('profile')
 * @UseGuards(JwtAuthGuard)
 * getProfile(@User() user: any) {
 *   return user; // { userId: '...', userNo: 1, role: 'user' }
 * }
 *
 * @example
 * // 특정 필드만 가져오기
 * @Get('my-data')
 * @UseGuards(JwtAuthGuard)
 * getMyData(@User('userId') userId: string) {
 *   return `Your ID is ${userId}`;
 * }
 *
 * @export
 * @constant User
 */
export const User = createParamDecorator(
  (data: string, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    const user = request.user;

    // 특정 필드만 반환
    return data ? user?.[data] : user;
  },
);
