import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  ParseUUIDPipe,
  Patch,
  Post,
  Put,
  Query,
  UseGuards,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { GetUser } from 'src/auth/get-user.decorator';
import type { LoginUserInfo } from 'src/auth/dto/login.dto';
import { CompraAsistidaService } from './compra-asistida.service';

@Controller('compra-asistida')
@UseGuards(AuthGuard('jwt'))
export class CompraAsistidaController {
  constructor(private readonly service: CompraAsistidaService) {}

  @Get()
  listar(
    @GetUser() user: LoginUserInfo,
    @Query('estado') estado?: string,
    @Query('clienteId') clienteId?: string,
    @Query('search') search?: string,
    @Query('page') page?: string,
    @Query('limit') limit?: string,
  ) {
    return this.service.listar(user.empresa_id, {
      estado,
      clienteId,
      search,
      page: page ? Number(page) : 1,
      limit: limit ? Number(limit) : 20,
    });
  }

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

  @Post()
  crear(@Body() body: any, @GetUser() user: LoginUserInfo) {
    return this.service.crear(user.empresa_id, user.id, body);
  }

  @Put(':id')
  editar(
    @Param('id', ParseUUIDPipe) id: string,
    @Body() body: any,
    @GetUser() user: LoginUserInfo,
  ) {
    return this.service.editar(id, user.empresa_id, body);
  }

  @Patch(':id/estado')
  avanzarEstado(
    @Param('id', ParseUUIDPipe) id: string,
    @Body('estado') estado: string,
    @GetUser() user: LoginUserInfo,
  ) {
    return this.service.avanzarEstado(id, user.empresa_id, estado);
  }

  @Post(':id/generar-link')
  generarLink(
    @Param('id', ParseUUIDPipe) id: string,
    @GetUser() user: LoginUserInfo,
  ) {
    return this.service.generarLink(id, user.empresa_id);
  }

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