import {
  Controller,
  Post,
  Get,
  Patch,
  Body,
  Param,
  Req,
  UseGuards,
  HttpCode,
  HttpStatus,
} from '@nestjs/common';
import { AdminService } from './admin.service';
import { AuthGuard } from '../auth/auth.guard';
import { RolesGuard } from '@/middleware/roles.guard';
import { Roles } from '@/middleware/roles.decorator';
import { GrantPremiumDto, PatchFeatureFlagDto } from './admin.dto';
import { FeatureFlagsService } from '../feature-flags/feature-flags.service';

@Controller('admin')
@UseGuards(AuthGuard, RolesGuard)
@Roles(['admin'])
export class AdminController {
  constructor(
    private readonly adminService: AdminService,
    private readonly featureFlagsService: FeatureFlagsService,
  ) {}

  @Post('grant-premium')
  @HttpCode(HttpStatus.OK)
  async grantPremium(@Body() body: GrantPremiumDto) {
    return this.adminService.grantPremium(body);
  }

  @Get('feature-flags')
  async getFeatureFlags() {
    const data = await this.featureFlagsService.listFeatureFlags();
    return { status: true, statusCode: HttpStatus.OK, data };
  }

  @Patch('feature-flags/:key')
  async patchFeatureFlag(
    @Param('key') key: string,
    @Body() body: PatchFeatureFlagDto,
    @Req() req: any,
  ) {
    const data = await this.featureFlagsService.updateFeatureFlag({
      key,
      enabled: body.enabled,
      updatedBy: req.user?.id,
    });
    return { status: true, statusCode: HttpStatus.OK, data };
  }
}
