import { Controller, Get, UseGuards } from "@nestjs/common";
import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
import { ApiKeyGuard } from "../common/auth/api-key.guard";
import { MerchantAuth } from "../common/auth/auth-context.decorator";
import type { ApiKeyAuthContext } from "../common/auth/auth.types";
import { ApiErrorResponse } from "../common/swagger/api-error.schema";
import { MerchantDto } from "./dto/merchant.dto";
import { MerchantService } from "./merchant.service";

@ApiTags("Merchants")
@ApiBearerAuth("bearerAuth")
@ApiResponse({ status: 401, description: "API key faltante, inválida o revocada.", type: ApiErrorResponse })
@ApiResponse({ status: 403, description: "Merchant inactivo.", type: ApiErrorResponse })
@ApiResponse({ status: 429, description: "Rate limit excedido.", type: ApiErrorResponse })
@Controller("merchants")
@UseGuards(ApiKeyGuard)
export class MerchantController {
  constructor(private readonly service: MerchantService) {}

  @Get("me")
  @ApiOperation({
    operationId: "merchantsRetrieveSelf",
    summary: "Obtener merchant autenticado",
    description: "Devuelve el merchant dueño de la API key del header `Authorization`.",
  })
  @ApiResponse({ status: 200, type: MerchantDto })
  me(@MerchantAuth() auth: ApiKeyAuthContext) {
    return this.service.findOne(auth.merchantId);
  }
}
