package com.devjob.user.controller;

import com.devjob.common.dto.ApiResponse;
import com.devjob.user.dto.MemberResponse;
import com.devjob.user.service.MemberService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * EP26: 서비스 간 호출(@HttpExchange) 전용 내부 API.
 *
 * devjob-application은 지원 완료 알림(이메일)을 보내기 위해 회원의 이메일
 * 주소를 알아야 한다. 이 컨트롤러는 그 용도로만 사용하는 조회 API를 제공한다.
 *
 * "/internal/**" 경로는 SecurityConfig에서 permitAll로 열어 두고, Gateway에는
 * 이 경로로의 라우트를 두지 않아 외부에서는 접근할 수 없도록 한다. 운영 환경에서는
 * 내부망 분리나 서비스 간 인증(mTLS, 내부 토큰 등)으로 추가 보호가 필요하지만,
 * 이 프로젝트에서는 학습 목적상 permitAll로 단순화한다.
 */
@Tag(name = "내부 서비스 API")
@RestController
@RequestMapping("/internal/users")
@RequiredArgsConstructor
public class InternalMemberController {

    private final MemberService memberService;

    @Operation(summary = "회원 단건 조회 (서비스 간 호출 전용)")
    @GetMapping("/{id}")
    public ApiResponse<MemberResponse> getById(@PathVariable Long id) {
        return ApiResponse.ok(MemberResponse.from(memberService.findById(id)));
    }
}
