import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
  Query,
  DefaultValuePipe,
  ParseIntPipe,
  UseGuards,
  Put,
} from '@nestjs/common';
import { PackagesService } from './app-packages.service';
import { Packages } from './entities/app-packages.entity';
import { AuthGuard } from 'src/auth/auth.guard';
import { PaginationDto } from './dto/pagination.dto';
import { AddPackagesDto, EditPackagesDto } from './dto/app-packages.dto';

@Controller('app-packages')
export class PackagesController {
  constructor(private readonly packagesService: PackagesService) { }

  @Post()
  create(@Body() createPackage: AddPackagesDto) {
    return this.packagesService.create(createPackage);  
  }
  @Put("/:package_id")
  update(@Param('package_id') package_id: number, @Body() editPackagesDto: EditPackagesDto) {
    return this.packagesService.update(package_id, editPackagesDto);
  }
  @Get('/:package_id')
  async findOne(@Param('package_id') package_id: number) {
    return await this.packagesService.getPackageDetails(package_id);
  }

  @Get('/v2/getPackagesList')
  async findPackagesList(@Query() paginationDto: PaginationDto) {
    return await this.packagesService.findPackagesList(paginationDto);
  }
   @Get('/v2/remove_existing_packages_list')
  async remove_existing_packages_list(@Query() paginationDto: PaginationDto) {
    return await this.packagesService.remove_existing_packages_list(paginationDto);
  }

  @Delete('/:package_id')
  remove(@Param('package_id') package_id: number) {
    return this.packagesService.delete(package_id);
  }

  @Put("approvedStatus/:package_id")
  updatePackageStatus(@Param('package_id') package_id: number) {
    return this.packagesService.updatePackageStatus(package_id, '1');
  }

  @Put("rejectedStatus/:package_id")
  rejectedStatus(@Param('package_id') package_id: number) {
    return this.packagesService.updatePackageStatus(package_id, '2');
  }
}

/*
export class PackagesController {
  constructor(private readonly packagesServices: PackagesServices) { }
  //@UseGuards(AuthGuard)
  @Get('/:id')
  findOne(@Param('id') id: number) {
    return this.packagesServices.findPackages(id);
  }
  /*@UseGuards(AuthGuard)
  @Get('/getPackages/:id')
  findBedHistorySearch(
    @Param('id') id: number,
    @Query('search') search: string,
  ) {
    return this.packagesServices.findPackagesSearch(id, search);
  }
  @UseGuards(AuthGuard)
  @Get('/v2/getPackagesList')
  async findPackagesDetails(
    @Query('id') id: number,
    @Query('search') search?: string,
    @Query('limit', new DefaultValuePipe(10), ParseIntPipe) limit?: number,
    @Query('page', new DefaultValuePipe(1), ParseIntPipe) page?: number,
  ) {
    try {
      if (!id) {
        return {
          status_code: process.env.BAD_REQUEST_CODE,
          status: process.env.BAD_REQUEST_STATUS,
          message: 'Package ID is required',
        };
      }

      const final_out = await this.packagesServices.findPackagesDetails(
        id,
        search,
        limit || 10,
        page || 1,
      );

      if (final_out.details.length > 0) {
        return {
          status_code: process.env.SUCCESS_STATUS_CODE,
          status: process.env.SUCCESS_STATUS,
          message: process.env.SUCCESS_MESSAGE,
          data: final_out.details,
          total: final_out.total,
        };
      } else {
        return {
          status_code: process.env.SUCCESS_STATUS_CODE,
          status: process.env.SUCCESS_STATUS,
          message: process.env.DATA_NOT_FOUND,
          data: [],
          total: 0,
        };
      }
    } catch (error) {
      return {
        status_code: process.env.ERROR_STATUS_CODE,
        status: process.env.ERROR_STATUS,
        message: process.env.ERROR_MESSAGE,
      };
    }
  }
  
}

*/
