import {
  Controller,
  Get,
  Post,
  Put,
  Body,
  Query,
  UseGuards,
} from '@nestjs/common';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import { CreditsService } from './credits.service';
import { ChargeCreditsDto } from './dto/charge-credits.dto';
import { UpdateSettingsDto } from './dto/update-settings.dto';

@Controller('credits')
@UseGuards(JwtAuthGuard)
export class CreditsController {
  constructor(private readonly creditsService: CreditsService) {}

  @Get()
  getBalance(@CurrentUser('id') userId: number) {
    return this.creditsService.getBalance(userId);
  }

  @Get('transactions')
  getTransactions(
    @CurrentUser('id') userId: number,
    @Query('page') page?: string,
    @Query('limit') limit?: string,
  ) {
    return this.creditsService.getTransactions(userId, {
      page: page ? parseInt(page, 10) : undefined,
      limit: limit ? parseInt(limit, 10) : undefined,
    });
  }

  @Post('charge')
  charge(@CurrentUser('id') userId: number, @Body() dto: ChargeCreditsDto) {
    return this.creditsService.charge(userId, dto);
  }

  @Get('settings')
  getSettings(@CurrentUser('id') userId: number) {
    return this.creditsService.getSettings(userId);
  }

  @Put('settings')
  updateSettings(@CurrentUser('id') userId: number, @Body() dto: UpdateSettingsDto) {
    return this.creditsService.updateSettings(userId, dto);
  }
}
