import {
  Body,
  Controller,
  Get,
  Param,
  Patch,
  Post,
  Query,
  Req,
  UseGuards,
} from "@nestjs/common"
import { CreateEmployeeFlagDto } from "./dto/create-employee-flag.dto"
import { EmployeeFlagsService } from "./employee-flags.service"
import { ApiBearerAuth, ApiTags } from "@nestjs/swagger"
import { AuthGuardMiddleware } from "../../middleware/auth-guard.middleware"
import { MyFlagsByEmployeeIdFilterDto } from "./dto/my-flags-by-employee-id-filter.dto"

@Controller("flags")
@ApiTags("Employee Flags")
@ApiBearerAuth("access-token")
@UseGuards(AuthGuardMiddleware)
export class EmployeeFlagsController {
  constructor(private readonly employeeFlagsService: EmployeeFlagsService) {}

  @Post("action-employee")
  create(
    @Body() createEmployeeFlagDto: CreateEmployeeFlagDto,
    @Req() request: Request,
  ) {
    return this.employeeFlagsService.create(
      createEmployeeFlagDto,
      request.headers["authorization"],
    )
  }

  @Get("employees")
  findAll(
    @Query() query: MyFlagsByEmployeeIdFilterDto,
    @Req() request: Request,
  ) {
    return this.employeeFlagsService.findAll(
      query,
      request.headers["authorization"],
    )
  }

  @Get("dropdown")
  findAllFlags() {
    return this.employeeFlagsService.findAllFlags()
  }

  @Get(":employeeId/employee-history")
  findFlagsByEmployeeId(
    @Param("employeeId") employeeId: string,
    @Query() query: MyFlagsByEmployeeIdFilterDto,
    @Req() request: Request,
  ) {
    return this.employeeFlagsService.findFlagsByEmployeeId(
      +employeeId,
      query,
      request.headers["authorization"],
    )
  }

  @Get("employee-history/:id")
  findOne(@Param("id") id: string) {
    return this.employeeFlagsService.findOne(+id)
  }

  @Patch("mark-as-resolved/:id")
  markAsResolved(@Param("id") id: string) {
    return this.employeeFlagsService.markAsResolved(+id)
  }
}
