import { Body, Controller, Get, Param, Post, Put, Query } from '@nestjs/common';
import { FilterSettingService } from './filter-setting.service';
import { USER_ROLE } from '../users/users.constant';
import { Roles } from 'src/common/decorators/roles.decorator';
import { ResponseMessage } from 'src/common/decorators/response_message.decorator';
import { FilterSettingDto, ValidateFilterSettingDto } from './filter-setting.validation';
import { ApiBody, ApiParam, ApiTags } from '@nestjs/swagger';

@ApiTags('Filter Setting')
@Controller('filter-setting')
export class FilterSettingController {

  constructor(
    private readonly filterSettingService: FilterSettingService,
  ) { }

  @Get('/get-filter-setting')
  @Roles(USER_ROLE.super_admin)
  @ResponseMessage('Successfully fetched filter setting')
  async getSetting(
    @Query('type') type: "text" | "image"
  ) {
    const result = await this.filterSettingService.getFilterSetting(type || "text");
    return result;
  }


  @Post('/create-filter-setting')
  @Roles(USER_ROLE.super_admin)
  @ResponseMessage('Successfully created filter setting')
  @ApiBody({ type: FilterSettingDto })
  async createSetting(
    @Body() body: FilterSettingDto & { type: "text" | "image" | "image_negative_prompt" }
  ) {
    const result = await this.filterSettingService.createFilterSetting(body);
    return result;
  }

  @Put('/update-filter-setting/:id')
  @ApiParam({ name: 'id', required: true })
  @Roles(USER_ROLE.super_admin)
  @ResponseMessage('Successfully updated filter setting')
  async updateSetting(
    @Param('id') id: string,
    @Body() body: FilterSettingDto
  ) {
    const result = await this.filterSettingService.updateFilterSetting(id, body);
    return result;
  }



  @Post('/validate-filter-setting')
  @Roles(USER_ROLE.super_admin)
  @ResponseMessage('Successfully validated filter setting')
  async validateFilterSetting(
    @Body() body: ValidateFilterSettingDto
  ) {
    const result = await this.filterSettingService.validateFilterSetting(body);
    return result;
  }

}
