import {
  Controller,
  Get,
  Param,
  Post,
  Request,
  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 { PublicRateLimitGuard } from "../common/guards/public-rate-limit.guard";
import { PublicTenantGuard } from "../tenancy/public-tenant.guard";
import { TenantGuard } from "../tenancy/tenant.guard";
import { TenantReleaseInterceptor } from "../tenancy/tenant-release.interceptor";
import { WhatsappService } from "./whatsapp.service";

@ApiTags("whatsapp")
@ApiBearerAuth()
@UseGuards(JwtAuthGuard, TenantGuard, PermissionGuard)
@UseInterceptors(TenantReleaseInterceptor)
@Controller("whatsapp")
export class WhatsappController {
  constructor(private readonly whatsappService: WhatsappService) {}

  @Post("cotizaciones/:id/enviar")
  @RequirePermission("cotizaciones", "write")
  @ApiOperation({ summary: "Enviar cotizacion al cliente por WhatsApp" })
  async sendCotizacion(@Param("id") id: number, @Request() req: any) {
    return this.whatsappService.sendCotizacion(id, req.user);
  }

  @Post("ots/:id/estado")
  @RequirePermission("ots", "write")
  @ApiOperation({ summary: "Enviar estado actualizado de OT por WhatsApp" })
  async sendEstadoOt(@Param("id") id: number, @Request() req: any) {
    return this.whatsappService.sendEstadoOt(id, req.user);
  }
}

@ApiTags("public")
@UseGuards(PublicRateLimitGuard, PublicTenantGuard)
@UseInterceptors(TenantReleaseInterceptor)
@Controller("public/ots")
export class PublicOtStatusController {
  constructor(private readonly whatsappService: WhatsappService) {}

  @Get(":token/status")
  @ApiOperation({ summary: "Consultar estado publico de una OT" })
  async getStatus(@Param("token") token: string) {
    return this.whatsappService.getPublicOtStatus(token);
  }
}
