/* ============================================================
 * Copyright (c) 2026 RAVAPI Soluções. www.ravapi.com
 * Controller de referência — usuários e permissão por série
 * ATENÇÃO: camada de ligação, ainda não coberta por teste automatizado.
 * ============================================================ */

import { Controller, Get, Post, Patch, Body, Param, Inject, UseInterceptors } from '@nestjs/common';
import { TenantInterceptor } from './tenant.interceptor.ts';
import { IDENTIDADE } from './recibos.module.ts';
import type { IdentityProvider } from '../core/identity.ts';
import { UsuariosService, type NovoConvite } from '../domain/usuarios.service.ts';

@Controller('usuarios')
@UseInterceptors(TenantInterceptor)
export class UsuariosController {
  constructor(
    private readonly usuarios: UsuariosService,
    @Inject(IDENTIDADE) private readonly identidade: IdentityProvider,
  ) {}

  @Get()
  listar() {
    return this.usuarios.listar();
  }

  @Post('convites')
  convidar(@Body() corpo: NovoConvite) {
    return this.usuarios.convidar(this.identidade.usuarioAtual(), corpo);
  }

  @Post(':id/desativacao')
  desativar(@Param('id') id: string) {
    return this.usuarios.desativar(this.identidade.usuarioAtual(), id);
  }

  /** "Liberar empresa pra usuário" é isto: as séries daquela empresa entram na lista. */
  @Patch(':id/series')
  definirSeries(@Param('id') id: string, @Body() corpo: { seriesIds: string[] }) {
    return this.usuarios.definirPermissoesDeSerie(this.identidade.usuarioAtual(), id, corpo.seriesIds ?? []);
  }
}
