import {
  Body,
  Controller,
  Delete,
  Get,
  HttpCode,
  Param,
  ParseIntPipe,
  Patch,
  Post,
} from '@nestjs/common';
import { createZodDto } from 'nestjs-zod';
import {
  CreateOportunidadeSchema,
  UpdateOportunidadeSchema,
  type FunilResponse,
  type Oportunidade,
} from '@sar/api-interface';
import { FunilService } from './funil.service';

class CreateDto extends createZodDto(CreateOportunidadeSchema) {}
class UpdateDto extends createZodDto(UpdateOportunidadeSchema) {}

@Controller('funil')
export class FunilController {
  constructor(private readonly funil: FunilService) {}

  @Get()
  listar(): Promise<FunilResponse> {
    return this.funil.listar();
  }

  @Post()
  criar(@Body() dto: CreateDto): Promise<Oportunidade> {
    return this.funil.criar(CreateOportunidadeSchema.parse(dto));
  }

  @Patch(':id')
  atualizar(@Param('id', ParseIntPipe) id: number, @Body() dto: UpdateDto): Promise<Oportunidade> {
    return this.funil.atualizar(id, UpdateOportunidadeSchema.parse(dto));
  }

  @Delete(':id')
  @HttpCode(204)
  deletar(@Param('id', ParseIntPipe) id: number): Promise<void> {
    return this.funil.deletar(id);
  }
}
