import { Controller, Post, Get, Body, UseGuards, Req } from '@nestjs/common';
import { AttendanceService } from './attendance.service';
import { CheckInDto, CheckOutDto } from './dto/attendance.dto';
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard';
import { ApiBearerAuth, ApiTags, ApiQuery } from '@nestjs/swagger';
import { Query } from '@nestjs/common';
import { PaginationQueryDto } from 'common/dto/pagination-query.dto';

@ApiTags('Attendance')
@ApiBearerAuth('access-token')
@Controller('attendance')
@UseGuards(JwtAuthGuard)
export class AttendanceController {
  constructor(private readonly attendanceService: AttendanceService) {}

  @Post('check-in')
  checkIn(@Req() req, @Body() checkInDto: CheckInDto) {
    const userId = req.user['userId'];
    return this.attendanceService.checkIn(userId, checkInDto);
  }

  @Post('check-out')
  checkOut(@Req() req, @Body() checkOutDto: CheckOutDto) {
    const userId = req.user['userId'];
    return this.attendanceService.checkOut(userId, checkOutDto);
  }

  @Get('today')
  getToday(@Req() req) {
    const userId = req.user['userId'];
    return this.attendanceService.getTodayAttendance(userId);
  }

  @Get('history')
  getHistory(@Req() req, @Query() query: PaginationQueryDto) {
    const userId = req.user['userId'];
    return this.attendanceService.getUserAttendance(userId, query);
  }

  @Get('all')
  @ApiQuery({ name: 'search', required: false })
  getAll(@Query() query: PaginationQueryDto) {
    return this.attendanceService.getAllAttendance(query);
  }
}