package go.kr.project.common.controller;

import egovframework.util.ApiResponseUtil;
import go.kr.project.common.model.CmmnCodeSearchVO;
import go.kr.project.common.service.CommonCodeService;
import go.kr.project.system.code.model.CodeDetailVO;
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.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * packageName    : go.kr.project.common.controller
 * fileName       : CommonCodeController
 * author         : 개발자
 * date           : 2025-05-10
 * description    : 공통 코드 관련 요청을 처리하는 컨트롤러
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2025-05-10        개발자       최초 생성
 */
@RequestMapping("/common/code")
@Controller
@RequiredArgsConstructor
@Slf4j
@Tag(name = "공통 코드", description = "공통 코드 관련 API")
public class CommonCodeController {

    private final CommonCodeService commonCodeService;

    /**
     * 특정 코드 그룹에 속한 코드 상세 목록을 조회하는 AJAX 메소드
     * 
     * @param cdGroupId 코드 그룹 ID
     * @return 코드 상세 목록과 성공 상태를 담은 ResponseEntity 객체
     * @throws Exception 조회 중 발생할 수 있는 예외
     */
    @Operation(summary = "코드 상세 목록 조회", description = "특정 코드 그룹에 속한 코드 상세 목록을 조회합니다.")
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "코드 상세 목록 조회 성공"),
        @ApiResponse(responseCode = "400", description = "코드 상세 목록 조회 실패"),
        @ApiResponse(description = "오류로 인한 실패")
    })
    @GetMapping("/detail/listByGroupId.ajax")
    public ResponseEntity<?> getCodeDetailListByGroupIdAjax(@RequestParam String cdGroupId) {
        List<CodeDetailVO> codeDetailList = commonCodeService.selectCodeDetailListByGroupId(cdGroupId);
        return ApiResponseUtil.success(codeDetailList);
    }

    /**
     * 검색 조건에 맞는 코드 상세 목록을 조회하는 AJAX 메소드
     *
     * @param searchVO 코드 상세 검색을 위한 검색 조건을 담은 VO 객체
     * @return 코드 상세 목록과 성공 상태를 담은 ResponseEntity 객체
     * @throws Exception 조회 중 발생할 수 있는 예외
     */
    @Operation(summary = "코드 상세 목록 조회", description = "검색 조건을 담은 VO 객체를 통해 코드 상세 목록을 조회합니다.")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "코드 상세 목록 조회 성공"),
            @ApiResponse(responseCode = "400", description = "코드 상세 목록 조회 실패"),
            @ApiResponse(description = "오류로 인한 실패")
    })
    @GetMapping("/detail/list.ajax")
    public ResponseEntity<?> getCodeDetailListAjax(@ModelAttribute CmmnCodeSearchVO searchVO) {
        List<CodeDetailVO> codeDetailList = commonCodeService.selectCodeDetailList(searchVO);
        return ApiResponseUtil.success(codeDetailList);
    }

}
