package com.zioinfo.esn.auth;

import com.zioinfo.esn.auth.mapper.UserAuthMapper;
import com.zioinfo.esn.common.ApiResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 관리자 OTP 초기화 (ADMIN 전용) — 사용자 관리 화면 버튼용.
 *
 * <p>base path {@code /api/admin/**} 는 SecurityConfig 에서 {@code hasRole("ADMIN")} 로 강제된다.
 * 대상 사용자의 OTP 시크릿을 폐기하고 등록을 해제(otp_secret=NULL, otp_enabled=false)하여
 * 다음 로그인 시 OTP_SETUP(QR 재등록) 플로우를 타게 한다.
 *
 * <p>로그인 인증 테이블(esn_user)을 username 기준으로 초기화한다(시스템 관리 화면의 userId == 로그인 username).
 * 보안 불변: 시크릿/코드는 응답·로그에 노출하지 않는다.
 */
@Slf4j
@RestController
@RequestMapping("/api/admin/users")
@RequiredArgsConstructor
public class AdminOtpController {

    private final UserAuthMapper userMapper;

    /** 관리자 OTP 초기화(다음 로그인 재등록 유도). */
    @PostMapping("/{username}/otp-reset")
    public ApiResponse<Map<String, String>> resetOtp(@PathVariable("username") String username) {
        userMapper.clearOtp(username);
        log.info("[otp] admin reset (re-enroll on next login): username={}", username);
        return ApiResponse.ok(Map.of("result", "ok"));
    }
}
