import { Controller, Get, Param, Post, Req, UseGuards } from '@nestjs/common';
import { Request } from 'express';
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard';
import { Rank } from './rank.model';
import { RankService } from './rank.service';

@Controller('rank')
export class RankController {
  constructor(private rankService: RankService) {}

  @Get()
  async getRankList(): Promise<Rank[]> {
    return this.rankService.findRankList();
  }

  @UseGuards(JwtAuthGuard)
  @Get('/:id')
  async getUserRank(@Param('id') userId: string): Promise<Rank> {
    return this.rankService.findByUserLatest(userId);
  }

  @UseGuards(JwtAuthGuard)
  @Get('/:id/all')
  async getUserHistory(@Param('id') userId: string): Promise<Rank[]> {
    return this.rankService.findByUser(userId);
  }

  @UseGuards(JwtAuthGuard)
  @Post('/add/20')
  async add20Points(@Req() req): Promise<any> {
    this.rankService.create(20, req.user.id);
  }

  @UseGuards(JwtAuthGuard)
  @Post('/add/60')
  async add60Points(@Req() req): Promise<void> {
    this.rankService.create(60, req.user.id);
  }

  @UseGuards(JwtAuthGuard)
  @Post('/add/100')
  async add100Points(@Req() req): Promise<void> {
    this.rankService.create(100, req.user.id);
  }
}