import {
  Controller,
  Get,
  Post,
  Param,
  Body,
  Query,
  UseGuards,
  Request,
  HttpCode,
  HttpStatus,
} from '@nestjs/common';
import { AuthGuard } from '../auth/auth.guard';
import { FeatureFlagGuard } from '@/modules/feature-flags/feature-flag.guard';
import { RequireFeature } from '@/modules/feature-flags/require-feature.decorator';
import { ClaimsService } from './claims.service';
import { CreateClaimDto } from './pets.dto';

@Controller('pet/claims')
@UseGuards(AuthGuard, FeatureFlagGuard)
@RequireFeature('section_reports_enabled')
export class ClaimsController {
  constructor(private readonly claimsService: ClaimsService) {}

  @Get()
  @HttpCode(HttpStatus.OK)
  getClaims(@Request() req, @Query('status') status?: string, @Query('type') type?: string) {
    return this.claimsService.getClaims(req.user.id, status, type);
  }

  @Get(':pet_id')
  @HttpCode(HttpStatus.OK)
  fetClaimForPet(@Request() req, @Param('pet_id') petId: string, @Query('type') type?: string) {
    return this.claimsService.fetClaimForPet(petId, req.user.id, type);
  }

  @Post(':id/claim')
  @HttpCode(HttpStatus.OK)
  createClaim(@Request() req, @Param('id') foundReportId: string, @Body() body: CreateClaimDto) {
    return this.claimsService.createClaim(foundReportId, body.lostReportId, req.user.id);
  }

  @Post(':id/approve')
  @HttpCode(HttpStatus.OK)
  approveClaim(@Request() req, @Param('id') id: string) {
    return this.claimsService.approveClaim(id, req.user.id);
  }

  @Post(':id/reject')
  @HttpCode(HttpStatus.OK)
  rejectClaim(@Request() req, @Param('id') id: string) {
    return this.claimsService.rejectClaim(id, req.user.id);
  }
}
