import {
  Controller,
  Get,
  Param,
  Post,
  Req,
  Res,
  UseGuards,
  UseInterceptors,
} from '@nestjs/common';
import { Response } from 'express';
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard';
import { UserService } from './user.service';
import { FtAuthGuard } from 'src/auth/ft-auth.guard';
import { ApiTags } from '@nestjs/swagger';
import { IpInterceptor } from 'src/ip.interceptor';

@ApiTags('User')
@Controller('api/user')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @UseGuards(FtAuthGuard)
  @Get('login')
  async login() {}

  @UseGuards(FtAuthGuard)
  @Get('login/callback')
  async callback(@Req() req: any, @Res({ passthrough: true }) res: Response) {
    if (req.user) {
      const token = await this.userService.login(req.user);
      res.cookie('w_auth', token);
      res.status(302).redirect('/submit');
    }
  }

  @UseGuards(JwtAuthGuard)
  @Get('status')
  async status(@Req() req: any) {
    return this.userService.status(req.user._id);
  }

  // @UseInterceptors(IpInterceptor)
  @UseGuards(JwtAuthGuard)
  @Post('checkIn/:cardId')
  async checkIn(@Req() req: any, @Param('cardId') cardId: number) {
    return this.userService.checkIn(req.user._id, cardId);
  }

  @UseGuards(JwtAuthGuard)
  @Post('checkOut')
  async checkOut(@Req() req: any) {
    return this.userService.checkOut(req.user._id);
  }

  @UseGuards(JwtAuthGuard)
  @Post('forceCheckOut/:userId')
  async forceCheckOut(@Req() req: any, @Param('userId') userId: number) {
    return this.userService.forceCheckOut(req.user._id, userId);
  }
}