package com.zioinfo.esn.auth;

import com.zioinfo.esn.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종 컨트롤러(공개 — SecurityConfig: /api/auth/** permitAll).
 *  - POST /api/auth/signup         : 회원가입(승인대기)
 *  - POST /api/auth/find-id        : 아이디 찾기(이름+이메일)
 *  - POST /api/auth/reset-password : 비밀번호 초기화(임시비번 메일 발송)
 * AuthController(/login,/verify,/me,/logout)와 메서드 경로 미충돌 — 동일 prefix 분리 컨트롤러.
 *
 * 보안: 아이디찾기/비번초기화는 미존재 계정도 success=true(열거방지).
 *       임시비번/자격증명은 응답에 절대 미포함(메일/로그 채널 전용).
 */
@RestController
@RequestMapping("/api/auth")
@RequiredArgsConstructor
public class AuthHelperController {

    private final AuthHelperService authHelperService;

    @PostMapping("/signup")
    public ApiResponse<SignupResponse> signup(@RequestBody SignupRequest req) {
        return ApiResponse.ok("가입 신청 완료 (승인 대기)", authHelperService.signup(req));
    }

    @PostMapping("/find-id")
    public ApiResponse<FindIdResponse> findId(@RequestBody FindIdRequest req) {
        return ApiResponse.ok(authHelperService.findId(req));
    }

    @PostMapping("/reset-password")
    public ApiResponse<Void> resetPassword(@RequestBody ResetPwRequest req) {
        // 미존재해도 항상 success=true (열거방지). 임시비번은 메일/로그로만 전달.
        authHelperService.resetPassword(req);
        return ApiResponse.ok("임시 비밀번호를 이메일로 발송했습니다.", null);
    }
}
