import {
  Controller,
  Get,
  Post,
  Body,
  Put,
  Patch,
  Param,
  Delete,
  Query,
  UseGuards,
} from "@nestjs/common"
import { GeneralLandingPageService } from "./general-landing-page.service"
import { CreateGeneralLandingPageDto } from "./dto/create-general-landing-page.dto"
import { UpdateGeneralLandingPageDto } from "./dto/update-general-landing-page.dto"
import { GeneralLandingPageFilterDto } from "./dto/general-landing-page-filter.dto"
import { ReorderGeneralLandingPageDto } from "./dto/reorder-general-landing-page.dto"
import { ApiTags, ApiOperation } from "@nestjs/swagger"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"

@ApiTags("General Landing Page")
@Controller("general-landing-page")
@UseGuards(AuthGuardMiddleware)
export class GeneralLandingPageController {
  constructor(
    private readonly generalLandingPageService: GeneralLandingPageService,
  ) {}

  @Post()
  @ApiOperation({ summary: "Create general landing page" })
  create(@Body() dto: CreateGeneralLandingPageDto) {
    return this.generalLandingPageService.create(dto)
  }

  @Get()
  @ApiOperation({ summary: "List general landing pages with pagination" })
  findAll(@Query() query: GeneralLandingPageFilterDto) {
    return this.generalLandingPageService.findAll(query)
  }

  @Patch("reorder")
  @ApiOperation({
    summary: "Reorder general landing pages (sort_order 1, 2, 3)",
  })
  reorder(@Body() dto: ReorderGeneralLandingPageDto[]) {
    return this.generalLandingPageService.reorder(dto)
  }

  @Get(":id")
  @ApiOperation({ summary: "Get general landing page by ID" })
  findOne(@Param("id") id: string) {
    return this.generalLandingPageService.findOne(+id)
  }

  @Put(":id")
  @ApiOperation({ summary: "Update general landing page by ID" })
  update(@Param("id") id: string, @Body() dto: UpdateGeneralLandingPageDto) {
    return this.generalLandingPageService.update(+id, dto)
  }

  @Delete(":id")
  @ApiOperation({ summary: "Soft delete general landing page by ID" })
  remove(@Param("id") id: string) {
    return this.generalLandingPageService.remove(+id)
  }
}
