import { Controller, Get, Post, Put, Delete, Body, Param, UseGuards } from '@nestjs/common';
import { ApiTags, ApiBearerAuth } from '@nestjs/swagger';
import { ServicesService } from './services.service';
import { JwtAuthGuard } from '../common/guards/jwt-auth.guard';
import { RolesGuard } from '../common/guards/roles.guard';
import { Roles } from '../common/decorators/roles.decorator';

@ApiTags('Services')
@Controller()
export class ServicesController {
  constructor(private servicesService: ServicesService) {}

  @Get('services')
  findAll() {
    return this.servicesService.findAll();
  }

  @Get('services/:slug')
  findBySlug(@Param('slug') slug: string) {
    return this.servicesService.findBySlug(slug);
  }

  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('SUPER_ADMIN', 'ADMIN')
  @Get('admin/services')
  adminFindAll() {
    return this.servicesService.adminFindAll();
  }

  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('SUPER_ADMIN', 'ADMIN')
  @Post('admin/services')
  create(@Body() data: { name: string; icon?: string; description?: string }) {
    return this.servicesService.create(data);
  }

  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('SUPER_ADMIN', 'ADMIN')
  @Put('admin/services/:id')
  update(@Param('id') id: string, @Body() data: { name?: string; icon?: string; description?: string }) {
    return this.servicesService.update(+id, data);
  }

  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('SUPER_ADMIN', 'ADMIN')
  @Delete('admin/services/:id')
  remove(@Param('id') id: string) {
    return this.servicesService.remove(+id);
  }

  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('SUPER_ADMIN', 'ADMIN')
  @Post('admin/services/:id/items')
  addItem(@Param('id') id: string, @Body() data: { name: string; orderNo?: number }) {
    return this.servicesService.addItem(+id, data);
  }

  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('SUPER_ADMIN', 'ADMIN')
  @Put('admin/services/items/:itemId')
  updateItem(@Param('itemId') itemId: string, @Body() data: { name?: string; orderNo?: number }) {
    return this.servicesService.updateItem(+itemId, data);
  }

  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('SUPER_ADMIN', 'ADMIN')
  @Delete('admin/services/items/:itemId')
  removeItem(@Param('itemId') itemId: string) {
    return this.servicesService.removeItem(+itemId);
  }
}
