import { Controller, Get, Post, Req, UseGuards } from "@nestjs/common"
import { ApiTags, ApiOperation, ApiBearerAuth } from "@nestjs/swagger"
import { Request } from "express"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"
import { SubscriptionService } from "./subscription.service"

@ApiTags("Subscription")
@Controller("subscription")
@UseGuards(AuthGuardMiddleware)
export class SubscriptionController {
  constructor(private readonly subscriptionService: SubscriptionService) {}

  @Get()
  @ApiBearerAuth("access-token")
  @ApiOperation({ summary: "Get current user subscription status" })
  getSubscription(@Req() request: Request) {
    return this.subscriptionService.getSubscription(
      request.headers["authorization"],
    )
  }

  @Post("trial")
  @ApiBearerAuth("access-token")
  @ApiOperation({ summary: "Start a free trial" })
  startTrial(@Req() request: Request) {
    return this.subscriptionService.startTrial(request.headers["authorization"])
  }

  @Post("cancel")
  @ApiBearerAuth("access-token")
  @ApiOperation({ summary: "Cancel subscription (effective at period end)" })
  cancelSubscription(@Req() request: Request) {
    return this.subscriptionService.cancelSubscription(
      request.headers["authorization"],
    )
  }
}
