import { Body, Controller, Get, Post, Patch, Delete, Param, UseGuards } from '@nestjs/common';
import { ListsService } from './lists.service';
import { JwtAuthGuard } from '../../common/guards/jwt.guard';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import { Workspace } from '../../common/decorators/workspace.decorator';

@Controller()
@UseGuards(JwtAuthGuard)
export class ListsController {
  constructor(private readonly listsService: ListsService) {}

  @Get('channels/:channelId/lists')
  async listByChannel(@Param('channelId') channelId: string, @Workspace('id') wsId: string) {
    return this.listsService.listByChannel(channelId, wsId);
  }

  @Post('channels/:channelId/lists')
  async create(
    @Param('channelId') channelId: string,
    @Workspace('id') wsId: string,
    @CurrentUser('userId') userId: string,
    @Body() dto: any,
  ) {
    return this.listsService.create(channelId, wsId, userId, dto);
  }

  @Get('lists/:id')
  async getById(@Param('id') id: string, @Workspace('id') wsId: string) {
    return this.listsService.findById(id, wsId);
  }

  @Post('lists/:id/items')
  async addItem(
    @Param('id') id: string,
    @Workspace('id') wsId: string,
    @CurrentUser('userId') userId: string,
    @Body() dto: any,
  ) {
    return this.listsService.addItem(id, wsId, userId, dto);
  }

  @Patch('lists/:id/items/:itemId')
  async updateItem(
    @Param('id') id: string,
    @Param('itemId') itemId: string,
    @CurrentUser('userId') userId: string,
    @Body() dto: any,
  ) {
    return this.listsService.updateItem(id, itemId, userId, dto);
  }

  @Delete('lists/:id/items/:itemId')
  async deleteItem(@Param('id') id: string, @Param('itemId') itemId: string) {
    return this.listsService.deleteItem(id, itemId);
  }

  @Post('lists/:id/items/:itemId/comments')
  async addComment(
    @Param('id') id: string,
    @Param('itemId') itemId: string,
    @CurrentUser('userId') userId: string,
    @Body() dto: any,
  ) {
    return this.listsService.addComment(id, itemId, userId, dto);
  }
}