import { Controller, Get, Req, UseGuards } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { AdminRequest } from '../auth/admin/admin-identity';
import { AdminJwtAuthGuard } from '../auth/admin/jwt.guard';
import { AdminMeService } from './admin-me.service';

/**
 * `GET /admin/me` (M7). 가드는 인증만 건다. 역할 표지는 두지 않는다 — 비관리자도 자기 메뉴를 받아야 하고,
 * 역할 분기는 서비스가 본다.
 */
@ApiTags('[관리자] 내 정보')
@Controller('admin')
export class AdminMeController {
  constructor(private readonly adminMe: AdminMeService) {}

  @Get('me')
  @UseGuards(AdminJwtAuthGuard)
  @ApiOperation({ summary: '내 권한 집합 · 최고관리자 여부 · 메뉴 트리' })
  // 가드가 request.admin 을 채운 뒤에만 이 자리에 온다 (AdminJwtAuthGuard).
  async getMe(@Req() req: AdminRequest) {
    return this.adminMe.getMe(req.admin!);
  }

  // 판정 지도 (D7). 경로 맵 · 영역 스위치 · 내 권한 집합만 준다. 역할 표지는 두지 않는다 (영업 · 기업도 applies=false 로 받는다).
  @Get('permission-map')
  @UseGuards(AdminJwtAuthGuard)
  @ApiOperation({
    summary: '판정 지도: 경로 → 권한 코드, 영역 스위치, 내 권한 집합',
  })
  async getPermissionMap(@Req() req: AdminRequest) {
    return this.adminMe.getPermissionMap(req.admin!);
  }
}
