import {
  Controller,
  Get,
  Post,
  Delete,
  Body,
  Param,
  Req,
  UseGuards,
  UseInterceptors,
  UploadedFiles,
} from '@nestjs/common';
import { FileFieldsInterceptor } from '@nestjs/platform-express';
import { QuickSnapsService } from './quick-snaps.service';
import { AuthGuard } from '../auth/auth.guard';
import { FeatureFlagGuard } from '../feature-flags/feature-flag.guard';
import { RequireFeature } from '../feature-flags/require-feature.decorator';
import { CreateQuickSnapDto, DisputeFlagDto } from './quick-snaps.dto';
import { imageUploadOptions } from '@/utils/image/image-upload.options';

@Controller('quick-snaps')
@UseGuards(AuthGuard, FeatureFlagGuard)
@RequireFeature('section_quick_snap_enabled')
export class QuickSnapsController {
  constructor(private readonly quickSnapsService: QuickSnapsService) {}

  @Post()
  @UseInterceptors(FileFieldsInterceptor([{ name: 'photo', maxCount: 1 }], imageUploadOptions(5)))
  createQuickSnap(
    @Req() req: any,
    @Body() body: CreateQuickSnapDto,
    @UploadedFiles() files?: { photo?: Express.Multer.File[] },
  ) {
    return this.quickSnapsService.createQuickSnap(req.user.id, body, files);
  }

  @Get('mine')
  getMyQuickSnaps(@Req() req: any) {
    return this.quickSnapsService.getMyQuickSnaps(req.user.id);
  }

  @Get(':id')
  getQuickSnapById(@Req() req: any, @Param('id') id: string) {
    return this.quickSnapsService.getQuickSnapById(req.user.id, id);
  }

  @Post(':id/flag-dispute')
  disputeQuickSnapFlag(@Req() req: any, @Param('id') id: string, @Body() body: DisputeFlagDto) {
    return this.quickSnapsService.disputeQuickSnapFlag(req.user.id, id, body?.reason ?? '');
  }

  @Delete(':id')
  deleteQuickSnapById(@Req() req: any, @Param('id') id: string) {
    return this.quickSnapsService.deleteQuickSnapById(req.user.id, id);
  }
}
