import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Patch,
  Post,
  Query,
  UseGuards,
} from '@nestjs/common';
import { Roles } from '../../common/decorators/roles.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { RolesGuard } from '../../common/guards/roles.guard';
import { CmsService } from './cms.service';
import { CreateCmsPageDto } from './dto/create-cms-page.dto';
import { UpdateCmsPageDto } from './dto/update-cms-page.dto';
import { UpdateThemeSettingDto } from './dto/update-theme-setting.dto';

@Controller('cms')
export class CmsController {
  constructor(private readonly cmsService: CmsService) {}

  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('super_admin')
  @Post('pages')
  createPage(@Body() data: CreateCmsPageDto) {
    return this.cmsService.createPage(data);
  }

  @Get('pages')
  findAllPages() {
    return this.cmsService.findAllPages();
  }

  @Get('pages/:slug')
  findPageBySlug(
    @Param('slug') slug: string,
    @Query('language') language?: string,
  ) {
    return this.cmsService.findPageBySlug(slug, language || 'fr');
  }

  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('super_admin')
  @Patch('pages/:id')
  updatePage(@Param('id') id: string, @Body() data: UpdateCmsPageDto) {
    return this.cmsService.updatePage(Number(id), data);
  }

  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('super_admin')
  @Delete('pages/:id')
  removePage(@Param('id') id: string) {
    return this.cmsService.removePage(Number(id));
  }

  @Get('theme/current')
  getTheme() {
    return this.cmsService.getTheme();
  }

  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('super_admin')
  @Patch('theme/current')
  updateTheme(@Body() data: UpdateThemeSettingDto) {
    return this.cmsService.updateTheme(data);
  }
}