import { Controller, Request, Post, Body, Get, Res, UseGuards,UseInterceptors, UploadedFile, Patch, Query, Put } from '@nestjs/common';
import { ApiOperation, ApiQuery, ApiResponse, ApiTags, ApiBody, ApiConsumes, ApiBearerAuth } from '@nestjs/swagger';
import { IndustriesService } from './industries.services';
import { toJsonResponse } from '../../common/response';
import { BrandGuard } from '../auth/guards/brand.guard';
import { CommonGuard } from '../auth/guards/common.guard';
import { AdminGuard } from '../auth/guards/admin.guard';

// DTO Files
import { CreateDto } from './dtos/create.dto';
import { ListQueryDto } from './dtos/list-query.dto';

@ApiTags('industries')
@Controller('industries')
export class IndustriesController {
    constructor(
        private industriesService: IndustriesService,
    ) {}

    // JP-
    @ApiBearerAuth('access-token')
    @ApiBody({ type: CreateDto })
    @UseGuards(AdminGuard)
    @Post()
    async create(@Body() request:CreateDto,@Request() req,@Res() response:any)
    {
        try {
            const data = await this.industriesService.create(request);
            response.status(201).json(data);
        }catch (error) {
            console.log(error);
            response.status(error.status).json(toJsonResponse(error.status,error.message));
        }
    }

    // JP-
    @ApiQuery({ name: 'page', required : true, example : 1 })
    @ApiQuery({ name: 'per_page', required : true, example : 50 })
    @ApiQuery({ name: 'sort_by', required: false, type : 'string' })
    @ApiQuery({ name: 'sort', required: false, type : 'string' })
    @ApiQuery({ name: 'search', required: false, type : 'string' })
    @Get()
    async list(@Query() queryParam: ListQueryDto ,@Request() req,@Res() response:any)
    {
        try {
            const data = await this.industriesService.list(queryParam);
            response.status(201).json(data);
        }catch (error) {
            console.log(error);
            response.status(error.status).json(toJsonResponse(error.status,error.message));
        }
    }
}
