import { Controller, Get, Post, Body, Patch, Param, Delete, DefaultValuePipe, ParseIntPipe, Query } from '@nestjs/common';
import { ClientsService } from './clients.service';
import { CreateClientDto } from './dto/create-client.dto';
import { UpdateClientDto } from './dto/update-client.dto';
import { ApiTags } from '@nestjs/swagger';

@Controller('clients')
@ApiTags('clients')
export class ClientsController {
	constructor(private readonly clientsService: ClientsService) {}

	@Post()
	create(@Body() createClientDto: CreateClientDto) {
		return this.clientsService.create(createClientDto);
	}

	@Get()
	findAll(@Query('page', new DefaultValuePipe(1), ParseIntPipe) page: number, @Query('limit', new DefaultValuePipe(10), ParseIntPipe) limit: number, @Query('sortBy') sortBy: string, @Query('sortOrder') sortOrder: string, @Query('search') search: string) {
		return this.clientsService.findAll((page - 1) * limit, limit, sortBy, sortOrder, search);
	}

	@Get('/simple')
	findAllSimple() {
		return this.clientsService.findAllSimple();
	}

	@Get('/simple/:id')
	findOneSimple(@Param('id') id: string) {
		return this.clientsService.findOneSimple(+id);
	}

	@Get(':id')
	findOne(@Param('id') id: string) {
		return this.clientsService.findOne(+id);
	}

	@Patch(':id')
	update(@Param('id') id: string, @Body() updateClientDto: UpdateClientDto) {
		return this.clientsService.update(+id, updateClientDto);
	}

	@Delete(':id')
	remove(@Param('id') id: string) {
		return this.clientsService.remove(+id);
	}
}
