import {
  Controller,
  Get,
  Post,
  Body,
  Param,
  Query,
  Req,
  UseGuards,
  HttpCode,
  HttpStatus,
} from '@nestjs/common';
import { ConversationsService } from './conversations.service';
import { AuthGuard } from '../auth/auth.guard';
import { FeatureFlagGuard } from '../feature-flags/feature-flag.guard';
import { RequireFeature } from '../feature-flags/require-feature.decorator';
import { CreateConversationDto, OpenConversationDto, SendMessageDto } from './conversations.dto';

@Controller('conversations')
@UseGuards(AuthGuard, FeatureFlagGuard)
@RequireFeature('feature_community_chat_enabled')
export class ConversationsController {
  constructor(private readonly conversationsService: ConversationsService) {}

  @Get()
  getConversations(@Req() req: any) {
    return this.conversationsService.getConversations(req.user.id);
  }

  @Post()
  @HttpCode(HttpStatus.CREATED)
  createConversation(@Req() req: any, @Body() body: CreateConversationDto) {
    return this.conversationsService.createConversation(req.user.id, body);
  }

  @Post('open')
  @HttpCode(HttpStatus.OK)
  openConversation(@Req() req: any, @Body() body: OpenConversationDto) {
    return this.conversationsService.openConversation(req.user.id, body);
  }

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

  @Get(':id/messages')
  getMessages(@Req() req: any, @Param('id') id: string, @Query('limit') limit?: string) {
    return this.conversationsService.getMessages(req.user.id, id, limit ? parseInt(limit, 10) : 50);
  }

  @Post(':id/messages')
  @HttpCode(HttpStatus.CREATED)
  sendMessage(@Req() req: any, @Param('id') id: string, @Body() body: SendMessageDto) {
    return this.conversationsService.sendMessage(req.user.id, id, body.text);
  }

  @Post(':id/read')
  @HttpCode(HttpStatus.OK)
  markAsRead(@Req() req: any, @Param('id') id: string) {
    return this.conversationsService.markAsRead(req.user.id, id);
  }
}
