import {
  Controller,
  Get,
  Param,
  Query,
  UseGuards,
  UseInterceptors,
} from "@nestjs/common";
import { ApiBearerAuth, ApiOperation, ApiTags } from "@nestjs/swagger";
import { RequirePermission } from "../auth/decorators/require-permission.decorator";
import { JwtAuthGuard } from "../auth/guards/jwt-auth.guard";
import { PermissionGuard } from "../auth/guards/permission.guard";
import { RequiereFlag } from "../taller-parametros/requiere-flag.decorator";
import { RequiereFlagGuard } from "../taller-parametros/requiere-flag.guard";
import { TenantGuard } from "../tenancy/tenant.guard";
import { TenantReleaseInterceptor } from "../tenancy/tenant-release.interceptor";
import { HistorialService } from "./historial.service";

@ApiTags("historial")
@ApiBearerAuth()
@UseGuards(JwtAuthGuard, TenantGuard, PermissionGuard, RequiereFlagGuard)
@UseInterceptors(TenantReleaseInterceptor)
@RequirePermission("historial", "read")
@RequiereFlag("modulos.usa_historial")
@Controller("historial")
export class HistorialController {
  constructor(private readonly historialService: HistorialService) {}

  @Get("search")
  @ApiOperation({
    summary: "Buscar historial por cliente, NIT, placa, marca o modelo",
  })
  async search(@Query("q") q: string) {
    return this.historialService.search(q);
  }

  @Get("cliente/:tarjeta")
  @ApiOperation({ summary: "Obtener historial por cliente" })
  async getByCliente(@Param("tarjeta") tarjeta: string) {
    return this.historialService.getHistorialByCliente(tarjeta);
  }

  @Get("placa/:placa")
  @ApiOperation({ summary: "Obtener historial por placa" })
  async getByPlaca(@Param("placa") placa: string) {
    return this.historialService.getHistorialByPlaca(placa);
  }
}
