import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Patch,
  Post,
} from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { User } from './entities/user.entity';
import { UsersService } from './users.service';
import { UpdateProfileDto } from './dto/update-profile.dto';

@ApiTags('Users')
@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  findAll(): Promise<User[]> {
    return this.usersService.findAll();
  }

  @Get('online')
  findOnline(): Promise<User[]> {
    return this.usersService.findOnline();
  }

  @Get('last-visited')
  findLastVisited(): Promise<User[]> {
    return this.usersService.findLastVisited();
  }

  @Get('top-ranked')
  findTopRanked(): Promise<User[]> {
    return this.usersService.findTopRanked();
  }

  @Get(':id')
  findOne(@Param('id') id: string): Promise<User> {
    return this.usersService.findOne(id);
  }

  @Post()
  create(@Body() data: Partial<User>): Promise<User> {
    return this.usersService.create(data);
  }

  @Patch(':id')
  update(@Param('id') id: string, @Body() data: Partial<User>): Promise<User> {
    return this.usersService.update(id, data);
  }

  @Patch(':id/profile')
  updateProfile(
    @Param('id') id: string,
    @Body() data: UpdateProfileDto,
  ): Promise<User> {
    return this.usersService.update(id, data);
  }

  @Patch(':id/presence')
  updatePresence(
    @Param('id') id: string,
    @Body() data: { isOnline: boolean },
  ): Promise<User> {
    return this.usersService.updatePresence(id, data.isOnline);
  }

  @Delete(':id')
  remove(@Param('id') id: string): Promise<{ success: boolean }> {
    return this.usersService.remove(id);
  }
}
