import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Post,
  Put,
  UseGuards,
} from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { successfulResult } from '../../utils';
import { JwtAuthGuard } from '../auth/jwt/jwt.guard';
import { Permissions } from '../auth/permission/permissions.decorator';
import { PermissionsGuard } from '../auth/permission/permissions.guard';
import { PermissionsType } from '../role/entities/permission.entity';
import { CreateKilometerRangeDto } from './dto/create-kilometer-range.dto';
import { UpdateKilometerRangeDto } from './dto/update-kilometer-range.dto';
import { KilometerRangeService } from './kilometer-range.service';

@ApiTags('Kilometer')
@Controller('kilometer-ranges')
export class KilometerRangeController {
  constructor(private kilometerRangeService: KilometerRangeService) {}

  /**
   * -------------------------------------------------------
   */
  @Get(':id/admin')
  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, PermissionsGuard)
  @Permissions(PermissionsType.GET_KILOMETER_RANGE)
  async getById(@Param('id') id: number) {
    const data = await this.kilometerRangeService.getById(id);
    return successfulResult([], data);
  }

  /**
   * -------------------------------------------------------
   */
  @Get('admin')
  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, PermissionsGuard)
  @Permissions(PermissionsType.GET_KILOMETER_RANGE)
  async getAll() {
    const list = await this.kilometerRangeService.getAll();
    return successfulResult([], list);
  }

  /**
   * -------------------------------------------------------
   */
  @Post('admin')
  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, PermissionsGuard)
  @Permissions(PermissionsType.ADD_KILOMETER_RANGE)
  async create(@Body() dto: CreateKilometerRangeDto) {
    const newRange = await this.kilometerRangeService.create(dto);
    return successfulResult(
      ['کیلومتر روزانه جدید با موفقیت ایجاد شد'],
      newRange,
    );
  }

  /**
   * -------------------------------------------------------
   */
  @Put(':id/admin')
  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, PermissionsGuard)
  @Permissions(PermissionsType.UPDATE_KILOMETER_RANGE)
  async update(@Param('id') id: number, @Body() dto: UpdateKilometerRangeDto) {
    await this.kilometerRangeService.update(id, dto);
    return successfulResult(['کیلومتر روزانه با موفقیت آپدیت شد']);
  }

  /**
   * -------------------------------------------------------
   */
  @Delete('/:id/admin')
  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, PermissionsGuard)
  @Permissions(PermissionsType.DELETE_KILOMETER_RANGE)
  async deleteKilometerRange(@Param('id') id: number) {
    await this.kilometerRangeService.deleteKilometerRange(id);
    return successfulResult(['محدوده کیلومتر موردنظر با موفقیت حذف شد']);
  }
}
