import { Controller, Get, Req, UseGuards } from '@nestjs/common';
import { ApiTags, ApiOperation } from '@nestjs/swagger';
import { Request } from 'express';
import { AdminRequest } from '../auth/admin/admin-identity';
import { AdminJwtAuthGuard } from '../auth/admin/jwt.guard';
import { RolesGuard } from '../auth/admin/roles.guard';
import { Roles } from '../auth/admin/roles.decorator';
import { MenuService } from './menu.service';

@ApiTags('[관리자] 메뉴')
@Controller('admin/menu')
export class MenuController {
  constructor(private menuService: MenuService) {}

  /**
   * 전체 메뉴 트리 조회 (권한 설정용)
   */
  @Get('all')
  @UseGuards(AdminJwtAuthGuard, RolesGuard)
  @Roles('admin')
  @ApiOperation({ summary: '전체 메뉴 트리 조회 (권한 설정용)' })
  async getAllList() {
    const data = await this.menuService.getAllMenuList();
    return data;
  }

  /**
   * 내 권한에 맞는 메뉴 트리 조회 (사이드바용)
   */
  @Get('my')
  @UseGuards(AdminJwtAuthGuard)
  @ApiOperation({ summary: '내 권한에 맞는 메뉴 트리 조회 (사이드바용)' })
  async getMyMenus(@Req() req: Request) {
    //* 신원을 통째로 넘긴다 — 최고관리자 판정이 role 까지 봐야 한다(번호만으로는 못 판정한다).
    return this.menuService.getMyMenuTree((req as unknown as AdminRequest).admin!);
  }
}
