import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
  UseGuards,
  Req,
  Query,
} from "@nestjs/common"
import { HospitalsService } from "./hospitals.service"
import { CreateHospitalDto } from "../dto/create-hospital.dto"
import { UpdateHospitalDto } from "../dto/update-hospital.dto"
import { ApiBearerAuth, ApiOperation, ApiTags } from "@nestjs/swagger"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"
import { HospitalFilterDto } from "../dto/filter-hospital.dto"

@Controller("hospitals")
@ApiTags("Hospitals")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class HospitalsController {
  constructor(private readonly hospitalsService: HospitalsService) {}

  @Post()
  create(@Body() createHospitalDto: CreateHospitalDto) {
    return this.hospitalsService.create(createHospitalDto)
  }

  @Post("backfill-place-ids")
  @ApiOperation({
    summary: "Backfill Place IDs",
    description:
      "Fetches Google Place IDs for hospitals that have an address but no place_id, using the Geocoding API.",
  })
  backfillPlaceIds() {
    return this.hospitalsService.backfillPlaceIds()
  }

  @Get()
  findAll(@Req() request: any, @Query() hospitalFilterDto: HospitalFilterDto) {
    return this.hospitalsService.findAll(hospitalFilterDto)
  }

  @Get(":id")
  findOne(@Param("id") id: string) {
    return this.hospitalsService.findOne(+id)
  }

  @Patch(":id")
  update(
    @Param("id") id: string,
    @Body() updateHospitalDto: UpdateHospitalDto,
  ) {
    return this.hospitalsService.update(+id, updateHospitalDto)
  }

  @Delete(":id")
  remove(@Param("id") id: string) {
    return this.hospitalsService.remove(+id)
  }
}
