// trip.controller.ts
import { Controller, Post, Body, Req, Get, Param, Patch, Delete, Query, UseGuards } from '@nestjs/common';
import { TripService } from './trip.service';
import { CreateTripDto } from './dto/create-trip.dto';
import { UpdateTripDto } from './dto/update-trip.dto';
import { GroupAdmin, TripMember, TripOwner } from '@/auth/decorator/permission.decorator';
import { JwtAuthGuard } from '@/auth/guards/jwt-auth/jwt-auth.guard';
@UseGuards(JwtAuthGuard)
@Controller('trips')
export class TripController {
  constructor(private readonly tripService: TripService) {}

  @Post()
  @GroupAdmin()
  create(@Req() req, @Body() dto: CreateTripDto) {
    return this.tripService.create(req.user.id, dto);
  }

  @Get()
  findAll(@Req() req, @Query('groupId') groupId?: string) {
    return this.tripService.findAll({ groupId });
  }

  @Get('/all-by-user')
  findAllByUser(@Req() req) {
    return this.tripService.findAllByUser(req.user.id);
  }

  @Get(':id')
  @TripMember()
  findOne(@Param('id') id: string, @Req() req) {
    return this.tripService.findOne(id, req);
  }

  @Patch(':id')
  @TripOwner()
  update(@Param('id') id: string, @Req() req, @Body() dto: UpdateTripDto) {
    return this.tripService.update(id, req.user.id, dto);
  }

  @Delete(':id')
  @TripOwner()
  remove(@Param('id') id: string, @Req() req) {
    return this.tripService.remove(id, req.user.id);
  }

  @Post(':id/close')
  @TripOwner()
  close(@Param('id') id: string, @Req() req) {
    return this.tripService.close(req.user.id, id);
  }
}