import { Controller, Get, Param, Post, Delete, UseGuards, SetMetadata, Query } from '@nestjs/common';
import { ApiTags, ApiOperation, ApiBearerAuth } from '@nestjs/swagger';
import { LoyaltyService } from './loyalty.service';
import { JwtGuard } from '../../common/jwt.guard';

@ApiTags('Loyalty')
@Controller('loyalty')
@UseGuards(JwtGuard)
@ApiBearerAuth('JWT-auth')
export class LoyaltyController {
  constructor(private service: LoyaltyService) {}
  @Get('accounts')                                        @SetMetadata('isPublic', true) @ApiOperation({ summary: 'List all loyalty accounts' })          getAccounts(@Query() q: any) { return this.service.getAccounts(q); }
  @Get(':passengerId')                                    @ApiOperation({ summary: 'Get loyalty account with tier progress' }) getAccount(@Param('passengerId') id: string) { return this.service.getAccount(id); }
  @Get(':passengerId/rewards')                            @ApiOperation({ summary: 'Get available rewards' })                  getRewards(@Param('passengerId') id: string) { return this.service.getRewards(id); }
  @Post(':passengerId/rewards/:rewardId/redeem')          @ApiOperation({ summary: 'Redeem a loyalty reward' })                redeemReward(@Param('passengerId') pid: string, @Param('rewardId') rid: string) { return this.service.redeemReward(pid, rid); }
  @Delete('accounts/:id')                                 @SetMetadata('isPublic', true) @ApiOperation({ summary: 'Delete loyalty account' })             deleteAccount(@Param('id') id: string) { return this.service.deleteAccount(id); }
}
