import { Body, Controller, Delete, Get, Param, Put, UseGuards } from '@nestjs/common';
import { IsObject } from 'class-validator';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { PermissionsGuard } from '../auth/guards/permissions.guard';
import { Permissions } from '../auth/permissions.decorator';
import { AppSettingsService } from './app-settings.service';

export class UpdateSettingsDto {
  @IsObject()
  settings!: Record<string, any>;
}

@Controller('api/v1/admin/settings')
@UseGuards(JwtAuthGuard, PermissionsGuard)
export class AppSettingsController {
  constructor(private readonly service: AppSettingsService) {}

  @Get()
  @Permissions('settings.view')
  async findAll() {
    const data = await this.service.findAll();
    return { success: true, message: 'Success', data };
  }

  @Put()
  @Permissions('settings.update')
  async update(@Body() dto: UpdateSettingsDto) {
    const data = await this.service.upsertMany(dto.settings);
    return { success: true, message: 'Settings updated', data };
  }

  @Delete(':key')
  @Permissions('settings.update')
  async delete(@Param('key') key: string) {
    const success = await this.service.delete(key);
    return { success, message: success ? 'Setting removed' : 'Setting not found' };
  }
}
