import {
  Controller,
  Get,
  Post,
  Patch,
  Delete,
  Body,
  Param,
  UseGuards,
  ParseUUIDPipe,
} from "@nestjs/common";
import { UserAgentService } from "./user-agent.service";
import { CreateUserAgentDto } from "./dto/create-user-agent.dto";
import { UpdateUserAgentDto } from "./dto/update-user-agent.dto";
import { AuthGuard } from "../auth/guards/auth.guard";
import { CurrentUser } from "../auth/decorators/current-user.decorator";
import type { AuthUser } from "@mosaic/shared";

@Controller("agents")
@UseGuards(AuthGuard)
export class UserAgentController {
  constructor(private readonly userAgentService: UserAgentService) {}

  @Get()
  findAll(@CurrentUser() user: AuthUser) {
    return this.userAgentService.findAll(user.id);
  }

  @Get("status")
  getAllStatuses(@CurrentUser() user: AuthUser) {
    return this.userAgentService.getAllStatuses(user.id);
  }

  @Get(":id")
  findOne(@CurrentUser() user: AuthUser, @Param("id", ParseUUIDPipe) id: string) {
    return this.userAgentService.findOne(user.id, id);
  }

  @Get(":id/status")
  getStatus(@CurrentUser() user: AuthUser, @Param("id", ParseUUIDPipe) id: string) {
    return this.userAgentService.getStatus(user.id, id);
  }

  @Post()
  create(@CurrentUser() user: AuthUser, @Body() dto: CreateUserAgentDto) {
    return this.userAgentService.create(user.id, dto);
  }

  @Post("from-template/:templateId")
  createFromTemplate(
    @CurrentUser() user: AuthUser,
    @Param("templateId", ParseUUIDPipe) templateId: string
  ) {
    return this.userAgentService.createFromTemplate(user.id, templateId);
  }

  @Patch(":id")
  update(
    @CurrentUser() user: AuthUser,
    @Param("id", ParseUUIDPipe) id: string,
    @Body() dto: UpdateUserAgentDto
  ) {
    return this.userAgentService.update(user.id, id, dto);
  }

  @Delete(":id")
  remove(@CurrentUser() user: AuthUser, @Param("id", ParseUUIDPipe) id: string) {
    return this.userAgentService.remove(user.id, id);
  }
}
