import { Body, Controller, Delete, Get, Param, Post, Put, Query, UseGuards } from '@nestjs/common';
import { OpHubPackagesService } from './op-hub-packages.service';
import PaginationDto from './dtos/pagination.dto';
import { AddPackagesDto } from './dtos/app-packages.dto';
import { UpdatePackagesDto } from './dtos/update-package.dto';
import { AddPackageCategoriesDto, EditPackageCategoriesDto } from './dtos/add-package-categories.dto';
import { AuthGuard } from 'src/auth/auth.guard';

@Controller('op-hub-packages')
export class OpHubPackagesController {
  constructor(private readonly opHubPackagesService: OpHubPackagesService) { }

@UseGuards(AuthGuard)
  @Post('/package-category')
  createPackageCategory(@Body() addPackageCategoriesDto: AddPackageCategoriesDto) {
    return this.opHubPackagesService.createPackageCategory(addPackageCategoriesDto);
  }

  @UseGuards(AuthGuard)
  @Put('/package-category/:package_category_id')
  updatePackageCategory(
    @Param('package_category_id') package_category_id: number,
    @Body() addPackageCategoriesDto: EditPackageCategoriesDto,
  ) {
    return this.opHubPackagesService.updatePackageCategory(
      package_category_id,
      addPackageCategoriesDto,
    );
  }

  @UseGuards(AuthGuard)
  @Get('/package-category/:package_category_id/:hospital_id')
  findById(@Param('package_category_id') package_category_id: number,
    @Param('hospital_id') hospital_id: number) {
    return this.opHubPackagesService.findById(package_category_id, hospital_id);
  }

  @UseGuards(AuthGuard)
  @Get('/package-category')
  findAll(@Query() paginationDto: PaginationDto) {
    return this.opHubPackagesService.findAll(paginationDto);
  }

  @UseGuards(AuthGuard)
  @Delete('/package-category/:package_category_id/:hospital_id')
  delete(@Param('package_category_id') package_category_id: string, @Param('hospital_id') hospital_id: string) {
    return this.opHubPackagesService.delete(Number(package_category_id), Number(hospital_id));
  }

  @UseGuards(AuthGuard)
  @Post('/packages')
  createPackage(@Body() addPackagesDto: AddPackagesDto) {
    return this.opHubPackagesService.createPackage(addPackagesDto);
  }

  @UseGuards(AuthGuard)
  @Put("/packages/:package_id")
  packageUpdate(@Param('package_id') package_id: number, @Body() updatePackagesDto: UpdatePackagesDto) {
    return this.opHubPackagesService.packageUpdate(package_id, updatePackagesDto);
  }

  @UseGuards(AuthGuard)
  @Get('/packages/:package_id/:hospital_id')
  async findOne(@Param('package_id') package_id: number,
    @Param('hospital_id') hospital_id: number) {
    return await this.opHubPackagesService.getPackageDetails(package_id, hospital_id);
  }

  // @UseGuards(AuthGuard)
  @Get('/packages/getPackagesList')
  async findPackagesList(@Query() paginationDto: PaginationDto) {
    return await this.opHubPackagesService.findPackagesList(paginationDto);
  }

  @UseGuards(AuthGuard)
  @Delete('/packages/:package_id/:hospital_id')
  deletePackages(@Param('package_id') package_id: number, @Param('hospital_id') hospital_id: number) {
    return this.opHubPackagesService.deletePackages(package_id, hospital_id);
  }
}
