import type { FastifyRequest, FastifyReply } from 'fastify';
import * as clientService from '../services/client.service.js';

export async function listHandler(request: FastifyRequest, _reply: FastifyReply) {
  const { search, page, limit } = request.query as { search?: string; page?: number; limit?: number };
  return clientService.list(search, page, limit);
}

export async function getHandler(request: FastifyRequest, _reply: FastifyReply) {
  const { id } = request.params as { id: string };
  return clientService.get(id);
}

export async function createHandler(request: FastifyRequest, _reply: FastifyReply) {
  const data = request.body as Record<string, unknown>;
  return clientService.create(data, request.user.id);
}

export async function updateHandler(request: FastifyRequest, _reply: FastifyReply) {
  const { id } = request.params as { id: string };
  const data = request.body as Record<string, unknown>;
  return clientService.updateClient(id, data, request.user.id);
}

export async function deleteHandler(request: FastifyRequest, _reply: FastifyReply) {
  const { id } = request.params as { id: string };
  await clientService.remove(id, request.user.id);
  return { ok: true };
}

export async function addSealHandler(request: FastifyRequest, _reply: FastifyReply) {
  const { id } = request.params as { id: string };
  const { name } = request.body as { name: string };
  return clientService.addSeal(id, name, request.user.id);
}

export async function removeSealHandler(request: FastifyRequest, _reply: FastifyReply) {
  const { clientId, sealId } = request.params as { clientId: string; sealId: string };
  await clientService.removeSeal(clientId, sealId, request.user.id);
  return { ok: true };
}
