import {
  Controller,
  Get,
  Post,
  Put,
  Delete,
  Param,
  Query,
  Body,
  ParseIntPipe,
  UseGuards,
} from '@nestjs/common';
import { NotificationsService } from './notifications.service';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import { RegisterFcmTokenDto } from './dto/register-fcm-token.dto';

@Controller('notifications')
@UseGuards(JwtAuthGuard)
export class NotificationsController {
  constructor(private readonly notificationsService: NotificationsService) {}

  @Get()
  findAll(
    @CurrentUser() user: { id: number; email: string },
    @Query('unreadOnly') unreadOnly?: string,
  ) {
    return this.notificationsService.findAll(
      user.id,
      unreadOnly === 'true',
    );
  }

  @Put('read-all')
  markAllAsRead(@CurrentUser() user: { id: number; email: string }) {
    return this.notificationsService.markAllAsRead(user.id);
  }

  @Put(':id/read')
  markAsRead(
    @CurrentUser() user: { id: number; email: string },
    @Param('id', ParseIntPipe) id: number,
  ) {
    return this.notificationsService.markAsRead(user.id, id);
  }

  @Delete(':id')
  remove(
    @CurrentUser() user: { id: number; email: string },
    @Param('id', ParseIntPipe) id: number,
  ) {
    return this.notificationsService.remove(user.id, id);
  }

  @Post('fcm-token')
  registerFcmToken(
    @CurrentUser() user: { id: number; email: string },
    @Body() dto: RegisterFcmTokenDto,
  ) {
    return this.notificationsService.registerFcmToken(user.id, dto.token);
  }

  @Delete('fcm-token')
  removeFcmToken(@CurrentUser() user: { id: number; email: string }) {
    return this.notificationsService.removeFcmToken(user.id);
  }

  @Post('test-push')
  testPush(@CurrentUser() user: { id: number; email: string }) {
    return this.notificationsService.createAndPush({
      userId: user.id,
      type: 'system',
      title: '테스트 알림',
      message: 'FreeFlow 푸시 알림이 정상적으로 동작합니다! 🎉',
      link: '/app',
    });
  }
}
