import { Body, Controller, Delete, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import type { LoginUserInfo } from 'src/auth/dto/login.dto';
import { GetUser } from 'src/auth/get-user.decorator';
import { ChofereService } from './choferes.service';
import { CreateChoferDto } from './dto/create-chofer.dto';
import { UpdateChoferDto } from './dto/update-chofer.dto';

@ApiTags('Choferes')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'))
@Controller({ path: 'choferes', version: '1' })
export class ChofereController {
  constructor(private readonly service: ChofereService) {}

  @Post()
  @ApiOperation({ summary: 'Crear chofer' })
  create(@Body() dto: CreateChoferDto, @GetUser() user: LoginUserInfo) {
    return this.service.create(dto, user.empresa_id);
  }

  @Get('search')
  @ApiQuery({ name: 'q', required: true })
  @ApiQuery({ name: 'limit', required: false })
  search(@GetUser() user: LoginUserInfo, @Query('q') q: string, @Query('limit') limit?: string) {
    return this.service.search(user.empresa_id, q, Number(limit) || 20);
  }

  @Get()
  @ApiQuery({ name: 'page', required: false })
  @ApiQuery({ name: 'limit', required: false })
  @ApiQuery({ name: 'activo', required: false })
  findAll(
    @GetUser() user: LoginUserInfo,
    @Query('page') page?: string,
    @Query('limit') limit?: string,
    @Query('activo') activo?: string,
  ) {
    return this.service.findAll(
      user.empresa_id,
      Number(page) || 1,
      Number(limit) || 20,
      activo !== undefined ? activo === 'true' : undefined,
    );
  }

  @Get(':id')
  findOne(@Param('id') id: string, @GetUser() user: LoginUserInfo) {
    return this.service.findOne(id, user.empresa_id);
  }

  @Patch(':id')
  update(@Param('id') id: string, @Body() dto: UpdateChoferDto, @GetUser() user: LoginUserInfo) {
    return this.service.update(id, user.empresa_id, dto);
  }

  @Delete(':id')
  remove(@Param('id') id: string, @GetUser() user: LoginUserInfo) {
    return this.service.remove(id, user.empresa_id);
  }
}
