import {
  Controller,
  Param,
  ParseIntPipe,
  Post,
  Req,
  UseGuards,
} from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { Request } from 'express';
import { auditContext } from '../../audit/audit-actor';
import { AdminRequest } from './admin-identity';
import { AdminJwtAuthGuard } from './jwt.guard';
import { MfaService } from './mfa.service';
import { OriginCheckGuard } from './origin-check.guard';
import { Roles } from './roles.decorator';
import { RolesGuard } from './roles.guard';
import { SuperAdminGuard } from './super-admin.guard';

/**
 * 최고관리자가 다른 계정의 2차 인증을 초기화한다(계획 3.17 · AZ-9) — 본인 경로(MfaSelfController)와 다른 컨트롤러다.
 * `kind` = admin · sales · corp-super · org-manager, `id` = 그 종류의 계정 키(admId · sagId · agcId · memId).
 */
@ApiTags('[관리자] 2차 인증')
@UseGuards(AdminJwtAuthGuard, RolesGuard, SuperAdminGuard, OriginCheckGuard)
@Roles('admin')
@Controller('admin/2fa')
export class MfaResetController {
  constructor(private readonly mfa: MfaService) {}

  @ApiOperation({ summary: '다른 계정의 2차 인증 초기화 (최고관리자)' })
  @Post('reset/:kind/:id')
  reset(
    @Param('kind') kind: string,
    @Param('id', ParseIntPipe) id: number,
    @Req() req: AdminRequest & Request,
  ) {
    return this.mfa.reset(req.admin!, kind, id, auditContext(req));
  }
}
