 import { Controller, Request, Post, Body, Get, Res, UseGuards,Param, Put, Query, Delete, Patch } from '@nestjs/common';
import { ApiParam, ApiQuery, ApiTags, ApiBody, ApiConsumes } from '@nestjs/swagger';
import { CmsService } from '../services/cms.services';
import { toJsonResponse } from '../../../common/response';

import { CmsDetailParamDto } from "../dtos/cms-detail-param.dto";
import { CommonGuard } from 'src/modules/auth/guards/common.guard';
import { CmsUpdateParamDto } from '../dtos/update-cms.dto';
import { CmsListQueryDto } from '../dtos/cms-list.dto';
import { CmsDetailQueryDto } from '../dtos/cms-detail-query.dto';
import { AdminGuard } from 'src/modules/auth/guards/admin.guard';

@ApiTags('cms')
@Controller('cms')
export class CrmController {
    constructor(private cmsService: CmsService) {}
 
    // JP-
    @Get()
    async list(@Res() response:any) {
        try {
            let data = await this.cmsService.list();
            response.status(200).json(data);
        }catch (error) {
            response.status(error.status).json(toJsonResponse(error.status,error.message));
        }
    }

    // JP-
    @ApiParam({ name : 'slug', required : true })
    @Get(':slug')
    async getDetails(@Param() param:CmsDetailParamDto,@Res() response:any) {
        try{
            let data = await this.cmsService.details(param);
            response.status(200).json(data);
        }catch (error) {
            response.status(error.status).json(toJsonResponse(error.status,error.message));
        }
    }

    // JP-
    @ApiParam({ name : 'slug', required : true })
    @Get('users/:slug')
    async getUsersDetails(@Param() param:CmsDetailParamDto,@Res() response:any) {
        try{
            let data = await this.cmsService.getUsersDetails(param);
            response.status(200).json(data);
        }catch (error) {
            response.status(error.status).json(toJsonResponse(error.status,error.message));
        }
    }


    // JP-
    @ApiParam({ name : 'slug', required : true })
    @ApiBody({ type : CmsUpdateParamDto })
    @UseGuards(AdminGuard)
    @Put(':slug')
    async updateCMS(@Param() param:CmsDetailParamDto,@Body() request:CmsUpdateParamDto,@Request() req,@Res() response:any) {
        try{
            await this.cmsService.CmsUpdate(request,param,req.user);
            response.status(201).json();
        }catch (error) {
            console.log(error);
            response.status(error.status).json(toJsonResponse(error.status,error.message));
        }
    }
}
