import { Body, Controller, Delete, Get, Param, Post, Put, Query, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiParam } from '@nestjs/swagger';
import type { LoginUserInfo } from 'src/auth/dto/login.dto';
import { GetUser } from 'src/auth/get-user.decorator';
import type { CreateCajaDto, UpdateCajaDto } from './cajas.service';
import { CajasService } from './cajas.service';

@Controller({ version: '1', path: 'cajas' })
export class CajasController {
  constructor(private readonly cajasService: CajasService) {}

  @Post()
  @UseGuards(AuthGuard('jwt'))
  @ApiBearerAuth()
  create(@Body() createCajaDto: CreateCajaDto, @GetUser() user: LoginUserInfo) {
    return this.cajasService.create(createCajaDto, user.id);
  }

  @Get()
  @UseGuards(AuthGuard('jwt'))
  @ApiBearerAuth()
  @ApiParam({ name: 'sucursal_id', type: 'string', required: true })
  findAllBySucursal(@Query('sucursal_id') sucursal_id: string) {
    return this.cajasService.findAllBySucursal(sucursal_id);
  }

  @Get(':id')
  @UseGuards(AuthGuard('jwt'))
  @ApiBearerAuth()
  findOne(@Param('id') id: string) {
    return this.cajasService.findOne(id);
  }

  @Put(':id')
  @UseGuards(AuthGuard('jwt'))
  @ApiBearerAuth()
  update(@Param('id') id: string, @Body() updateCajaDto: UpdateCajaDto, @GetUser() user: LoginUserInfo) {
    return this.cajasService.update(id, updateCajaDto, user.empresa_id, user.id);
  }

  @Put('activar-desactivar/:id')
  @UseGuards(AuthGuard('jwt'))
  @ApiBearerAuth()
  toggleStatus(@Param('id') id: string, @GetUser() user: LoginUserInfo) {
    return this.cajasService.toggleStatus(id, user.empresa_id, user.id);
  }

  @Delete(':id')
  @UseGuards(AuthGuard('jwt'))
  @ApiBearerAuth()
  remove(@Param('id') id: string, @GetUser() user: LoginUserInfo) {
    return this.cajasService.remove(id, user.empresa_id, user.id);
  }
}
