import { AuthMethod, MultiTenancyInterceptor, UseAuth } from '@backend/auth'
import { Body, Controller, Get, HttpCode, Post, UseInterceptors } from '@nestjs/common'
import {
	ApiBadRequestResponse,
	ApiForbiddenResponse,
	ApiInternalServerErrorResponse,
	ApiNoContentResponse,
	ApiOkResponse,
	ApiTags,
} from '@nestjs/swagger'
import { SettingsService } from '../services'
import { SaveSettingsRequest, SettingsResponse } from '../types'

@UseAuth(AuthMethod.JWT)
@UseInterceptors(MultiTenancyInterceptor)
@Controller('settings')
@ApiTags('default')
export class SettingsController {
	constructor(private readonly _settingsService: SettingsService) {}

	@Get()
	@ApiOkResponse({ type: SettingsResponse })
	@ApiBadRequestResponse()
	@ApiInternalServerErrorResponse()
	async find(): Promise<SettingsResponse> {
		return this._settingsService.find()
	}

	@Post()
	@HttpCode(204)
	@ApiNoContentResponse()
	@ApiBadRequestResponse()
	@ApiForbiddenResponse()
	@ApiInternalServerErrorResponse()
	async save(@Body() request: SaveSettingsRequest): Promise<void> {
		return this._settingsService.save(request)
	}
}
