import { Body, Controller, Delete, Get, Param, Patch, Post, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import { RequireModule, RequirePermission } from 'src/auth/decorators';
import type { LoginUserInfo } from 'src/auth/dto/login.dto';
import { GetUser } from 'src/auth/get-user.decorator';
import { ModuleGuard } from 'src/auth/guards/module.guard';
import { PermissionGuard } from 'src/auth/guards/permission.guard';
import { CreatePosConfigDto } from './dto/create-pos-config.dto';
import { UpdatePosConfigDto } from './dto/update-pos-config.dto';
import { PosConfigService } from './pos-config.service';

@ApiTags('POS Config')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('VENTAS')
@Controller({ path: 'pos-config', version: '1' })
export class PosConfigController {
  constructor(private readonly posConfigService: PosConfigService) {}

  @Post()
  @RequirePermission('VENTAS', 'VEN_POS_POS_CONFIGURAR')
  @ApiOperation({ summary: 'Crear configuración de POS para una caja' })
  create(@Body() dto: CreatePosConfigDto, @GetUser() user: LoginUserInfo) {
    return this.posConfigService.create(dto, user?.empresa_id, user?.id);
  }

  @Get('caja/:cajaId')
  @RequirePermission('VENTAS', 'VEN_POS_VENTA_VER')
  @ApiOperation({ summary: 'Obtener configuración de POS por caja' })
  findByCaja(@Param('cajaId') cajaId: string) {
    return this.posConfigService.findByCaja(cajaId);
  }

  @Get(':id')
  @RequirePermission('VENTAS', 'VEN_POS_VENTA_VER')
  @ApiOperation({ summary: 'Obtener configuración de POS por ID' })
  findOne(@Param('id') id: string) {
    return this.posConfigService.findOne(id);
  }

  @Patch('caja/:cajaId')
  @RequirePermission('VENTAS', 'VEN_POS_POS_CONFIGURAR')
  @ApiOperation({ summary: 'Actualizar configuración de POS por caja' })
  update(@Param('cajaId') cajaId: string, @Body() dto: UpdatePosConfigDto, @GetUser() user: LoginUserInfo) {
    return this.posConfigService.update(cajaId, dto, user?.empresa_id, user?.id);
  }

  @Delete(':id')
  @RequirePermission('VENTAS', 'VEN_POS_POS_CONFIGURAR')
  @ApiOperation({ summary: 'Eliminar configuración de POS' })
  remove(@Param('id') id: string, @GetUser() user: LoginUserInfo) {
    return this.posConfigService.remove(id, user?.empresa_id, user?.id);
  }
}
