import { Controller, Post, Body, Req, UseGuards, Headers } from "@nestjs/common"
import {
  ApiTags,
  ApiOperation,
  ApiBearerAuth,
  ApiExcludeEndpoint,
} from "@nestjs/swagger"
import { Request } from "express"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"
import { StripeService } from "./stripe.service"
import { CreateCheckoutDto } from "./dto/create-checkout.dto"

@ApiTags("Stripe")
@Controller("stripe")
export class StripeController {
  constructor(private readonly stripeService: StripeService) {}

  @Post("checkout-session")
  @UseGuards(AuthGuardMiddleware)
  @ApiBearerAuth("access-token")
  @ApiOperation({ summary: "Create Stripe checkout session" })
  createCheckoutSession(
    @Req() request: Request,
    @Body() dto: CreateCheckoutDto,
  ) {
    return this.stripeService.createCheckoutSession(
      request.headers["authorization"],
      dto.plan_id,
      dto.success_url,
      dto.cancel_url,
    )
  }

  @Post("webhook")
  @ApiExcludeEndpoint()
  async handleWebhook(
    @Req() request: Request,
    @Headers("stripe-signature") signature: string,
  ) {
    const rawBody = request.body
    return this.stripeService.handleWebhook(rawBody, signature)
  }
}
