package go.kr.project.common.controller;

import egovframework.configProperties.LoginProperties;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
 * packageName    : egovframework.config
 * fileName       : ConfigController
 * author         : 박성영
 * date           : 25. 5. 19.
 * description    : 설정값을 자바스크립트로 전달하는 컨트롤러
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 25. 5. 19.        박성영       최초 생성
 */
@RequestMapping("/common/config")
@Controller
@RequiredArgsConstructor
@Slf4j
@Tag(name = "시스템 설정", description = "시스템 설정 관련 API")
public class ConfigController {

    private final LoginProperties loginProperties;

    /**
     * 로그인 URL 설정값을 자바스크립트로 전달
     *
     * @return 자바스크립트 코드
     */
    @Operation(summary = "로그인 URL 설정값 자바스크립트 반환", description = "로그인 URL 설정값을 자바스크립트 코드로 반환합니다.")
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "자바스크립트 반환 성공")
    })
    @GetMapping(value = "/login-url.do", produces = "application/javascript")
    public ResponseEntity<String> getLoginUrlJs() {
        String js = "var loginUrl = '" + loginProperties.getUrl() + "';";
        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType("application/javascript"))
                .body(js);
    }

    /**
     * 컨택스트 패스 설정값을 자바스크립트로 전달
     * .do, .ajax 등 URL 호출 시 컨택스트 패스를 적용하기 위해 사용
     *
     * @param request HttpServletRequest
     * @return 자바스크립트 코드
     */
    @Operation(summary = "컨택스트 패스 설정값 자바스크립트 반환", description = "컨택스트 패스 설정값을 자바스크립트 코드로 반환합니다.")
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "자바스크립트 반환 성공")
    })
    @GetMapping(value = "/context-path.do", produces = "application/javascript")
    public ResponseEntity<String> getContextPathJs(HttpServletRequest request) {
        // 컨택스트 패스를 가져와서 JavaScript 변수로 설정
        String contextPath = request.getContextPath();
        String js = "var contextPath = '" + contextPath + "';";
        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType("application/javascript"))
                .body(js);
    }
}