import { TenantHeaderInterceptor } from '@backend/auth'
import { ReviewsRepository, SettingsRepository } from '@backend/repository'
import { Controller, Get, UseInterceptors } from '@nestjs/common'
import { ApiInternalServerErrorResponse, ApiOkResponse, ApiTags } from '@nestjs/swagger'
import { CustomerReviewsResponse } from '../types'

@UseInterceptors(TenantHeaderInterceptor)
@Controller('/customer/reviews')
@ApiTags('customer')
export class CustomerReviewsController {
	constructor(
		private readonly _reviewsRepository: ReviewsRepository,
		private readonly _settingsRepository: SettingsRepository,
	) {}

	@Get()
	@ApiOkResponse({ type: CustomerReviewsResponse })
	@ApiInternalServerErrorResponse()
	async find(): Promise<CustomerReviewsResponse> {
		const reviews = await this._reviewsRepository.findOne({ select: { rating: true, totalRatings: true } })
		const settings = await this._settingsRepository.findOne({ select: { restaurant: { googlePlaceId: true } } })

		return {
			rating: reviews?.rating ?? 0,
			totalRatings: reviews?.totalRatings ?? 0,
			reviewUrl: settings?.restaurant.googlePlaceId
				? `https://search.google.com/local/writereview?placeid=${settings?.restaurant.googlePlaceId}`
				: undefined,
		}
	}
}
