import { Body, Controller, Get, Post, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { User } from '../../utils/decorators/user.decorator';
import { successfulResult } from '../../utils';
import { UserService } from '../user/user.service';
import { AuthService } from './auth.service';
import { AuthLoginDto } from './dto/auth-login.dto';
import { JwtAuthGuard } from './jwt/jwt.guard';

@ApiTags('Auth')
@Controller('auth')
export class AuthController {
  constructor(
    private authService: AuthService,
    private userService: UserService,
  ) {}

  /**
   * -------------------------------------------------------
   */
  @Post('login')
  async login(@Body() dto: AuthLoginDto) {
    const userData = await this.authService.login(dto);
    const response = await this.authService.prepareUserResponse(
      userData,
      dto.rememberMe,
    );
    return successfulResult(['با موفقیت لاگین شدید'], response);
  }

  /**
   * -------------------------------------------------------
   */
  @Get('me')
  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard)
  async me(@User('id') userId: string) {
    const userInfo = await this.userService.getById(userId);
    return successfulResult(['اطلاعات یوزر'], userInfo);
  }
}
