import { Controller, Get, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';
import { successfulResult } from '../../utils';
import { Filter } from '../../utils/decorators/filter.decorator';
import { Limit } from '../../utils/decorators/limit.decorator';
import { Page } from '../../utils/decorators/page.decorator';
import { Sort } from '../../utils/decorators/sort.decorator';
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 { PictureSerrvice } from './picture.service';

@ApiTags('Picture')
@Controller('pictures')
export class PictureController {
  constructor(private pictureService: PictureSerrvice) {}

  /**
   * -------------------------------------------------------
   */
  @Get('admin')
  @ApiBearerAuth()
  @UseGuards(JwtAuthGuard, PermissionsGuard)
  @Permissions(PermissionsType.GET_PRODUCT_PICTURE)
  @ApiQuery({ name: 'product_id', required: false })
  @ApiQuery({ name: 'sort', required: false, description: 'e.g. id:desc' })
  @ApiQuery({ name: 'limit', required: false, description: 'Default: 20' })
  @ApiQuery({ name: 'page', required: false, description: 'Default: 1' })
  async list(
    @Page() page,
    @Limit() limit,
    @Sort() sorts,
    @Filter([['product_id', 'productMappings.productId']])
    filters,
  ) {
    const data = await this.pictureService.getAll(page, limit, filters, sorts);
    return successfulResult([], data);
  }
}
