import { Body, Controller, Delete, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common'
import { JwtAuthGuard } from '../auth/jwt-auth.guard.js'
import { OperatorGuard } from '../auth/operator.guard.js'
import { CreatePriceDto } from './dto/create-price.dto.js'
import { UpdatePriceDto } from './dto/update-price.dto.js'
import { PricesService } from './prices.service.js'

// All endpoints require an authenticated caller. Read is open to any
// authenticated JWT (partners + portal users see prices for display);
// write operations layer the OperatorGuard on top.
@Controller('prices')
@UseGuards(JwtAuthGuard)
export class PricesController {
  constructor(private readonly prices: PricesService) {}

  @Get()
  list(@Query('includeInactive') includeInactive?: string) {
    return this.prices.findAll(includeInactive === 'true')
  }

  // How many live customers a price edit on this row would touch, per currency.
  // Operator-only — it exposes subscription counts. Drives the save warning.
  @Get(':id/impact')
  @UseGuards(OperatorGuard)
  impact(@Param('id') id: string) {
    return this.prices.impact(id)
  }

  @Post()
  @UseGuards(OperatorGuard)
  create(@Body() dto: CreatePriceDto) {
    return this.prices.create(dto)
  }

  @Patch(':id')
  @UseGuards(OperatorGuard)
  update(@Param('id') id: string, @Body() dto: UpdatePriceDto) {
    return this.prices.update(id, dto)
  }

  @Delete(':id')
  @UseGuards(OperatorGuard)
  deactivate(@Param('id') id: string) {
    return this.prices.deactivate(id)
  }
}
