import { Controller, Get, Param, Query, UseGuards } from '@nestjs/common';
import { ErpJwtGuard } from 'src/sesion/erp-jwt.guard';
import { GetSesion } from 'src/sesion/get-sesion.decorator';
import { NovasisGuard } from 'src/sesion/novasis.guard';
import { Sesion } from 'src/sesion/sesion.types';
import { CatalogoService } from './catalogo.service';
import {
  AlertasQuery,
  BuscarDocumentoQuery,
  DocumentoParams,
  GuiasQuery,
  ListarDocumentosQuery,
} from './dto/catalogo.dto';

/**
 * Las herramientas del catálogo expuestas por HTTP, para probarlas con un token
 * real antes de que exista el agente (fase 0).
 *
 * Solo Novasis (superadmin del holding). El alcance es igual el de la SESIÓN:
 * para diagnosticar a un cliente, el superadmin se cambia a esa empresa en el
 * ERP (switchEmpresa) y consulta acá. No hay forma de pedir otra empresa por
 * parámetro.
 */
@Controller({ path: 'catalogo', version: '1' })
@UseGuards(ErpJwtGuard, NovasisGuard)
export class CatalogoController {
  constructor(private readonly catalogo: CatalogoService) {}

  @Get('documentos/buscar')
  buscar(@GetSesion() sesion: Sesion, @Query() q: BuscarDocumentoQuery) {
    return this.catalogo.buscarDocumento(sesion, q.texto, q.tipo);
  }

  @Get('documentos/:tipo/:id')
  estado(@GetSesion() sesion: Sesion, @Param() p: DocumentoParams) {
    return this.catalogo.estadoDocumento(sesion, p.tipo, p.id);
  }

  @Get('documentos')
  listar(@GetSesion() sesion: Sesion, @Query() q: ListarDocumentosQuery) {
    return this.catalogo.listarDocumentos(sesion, {
      tipo: q.tipo,
      estadosSifen: q.estado,
      desde: q.desde,
      hasta: q.hasta,
    });
  }

  @Get('alertas')
  alertas(@GetSesion() sesion: Sesion, @Query() q: AlertasQuery) {
    return this.catalogo.alertasAbiertas(sesion, q.modulo);
  }

  @Get('empresa/salud')
  salud(@GetSesion() sesion: Sesion) {
    return this.catalogo.saludEmpresa(sesion);
  }

  @Get('guias')
  guias(@GetSesion() sesion: Sesion, @Query() q: GuiasQuery) {
    return this.catalogo.buscarGuia(sesion, q.q, q.screen_key);
  }
}
