package com.zioinfo.hrm.auth;

import com.zioinfo.hrm.auth.dto.FindIdRequest;
import com.zioinfo.hrm.auth.dto.FindIdResponse;
import com.zioinfo.hrm.auth.dto.ResetPwRequest;
import com.zioinfo.hrm.auth.dto.SignupRequest;
import com.zioinfo.hrm.auth.dto.SignupResponse;
import com.zioinfo.hrm.common.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 로그인 보조 기능 3종(UIWS auth 패턴 이식) — 회원가입 / 아이디찾기 / 비밀번호 초기화.
 *
 * <p>base path {@code /api/auth} (SecurityConfig permitAll — 로그인 전 무인증 접근).
 * 대상은 PMS 사용자 계정(hrm_users).
 * <ul>
 *   <li>회원가입: 승인 대기(approved=false) 상태로 등록 → ADMIN 승인 전 로그인 차단</li>
 *   <li>아이디찾기: displayName+email 매칭, username 부분 마스킹 반환</li>
 *   <li>비번초기화: username+email 검증 → 임시비번 BCrypt 저장 + 메일/로그 발송(응답에 비번 미포함)</li>
 * </ul>
 * 보안 불변규칙: 임시비번·자격증명·계정 존재여부를 응답/로그 메시지에 노출하지 않는다.
 * (기존 2FA 로그인/검증 컨트롤러 AuthController(/api/hrm/auth)와 별개 — 회귀 0.)
 */
@RestController
@RequestMapping("/api/auth")
@RequiredArgsConstructor
public class AuthHelperController {

    private final AuthService authService;

    /** 회원가입(승인 대기 INSERT). */
    @PostMapping("/signup")
    public ApiResponse<SignupResponse> signup(@RequestBody SignupRequest req) {
        return ApiResponse.ok(authService.signup(req));
    }

    /** 아이디 찾기(이메일+이름 매칭, 마스킹 반환). */
    @PostMapping("/find-id")
    public ApiResponse<FindIdResponse> findId(@RequestBody FindIdRequest req) {
        return ApiResponse.ok(authService.findId(req));
    }

    /** 비밀번호 초기화(검증 → 임시비번 BCrypt + 메일/로그). */
    @PostMapping("/reset-password")
    public ApiResponse<SignupResponse> resetPassword(@RequestBody ResetPwRequest req) {
        return ApiResponse.ok(authService.resetPassword(req));
    }
}
