package incheon.ags.dss.regen.web;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import incheon.com.cmm.api.DefaultApiResponse;
// import incheon.com.cmm.util.RequestContext;

import org.springframework.http.ResponseEntity;
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 org.springframework.web.bind.annotation.RestController;

import incheon.ags.dss.regen.service.UrbMdlLibDtlService;
import incheon.ags.dss.regen.vo.UrbMdlLibDtlVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

/**
 * 3D 모델 라이브러리(UrbMdlLib) 기능의 JSON 데이터를 반환하는 API 컨트롤러 (R-Only)
 */
@RestController 
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/api/v1/dss/urb/mdlLib")
public class UrbMdlLibDtlApiController {

    private final UrbMdlLibDtlService urbMdlLibDtlService;

    /**
     * 3D 모델 라이브러리 목록 데이터 조회 (JSON)
     */
    @GetMapping("/list.do")
    public ResponseEntity<DefaultApiResponse> getUrbMdlLibList(
            @ModelAttribute UrbMdlLibDtlVO searchVO) throws Exception {
        
        log.info("API: getUrbMdlLibList (Page: {}, Keyword: {})", searchVO.getPageIndex(), searchVO.getSearchKeyword());
        
        PaginationInfo paginationInfo = new PaginationInfo();
        paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
        paginationInfo.setRecordCountPerPage(searchVO.getRecordCountPerPage());
        paginationInfo.setPageSize(searchVO.getPageSize());

        searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
        // searchVO.setLOGIN_USER_ID(RequestContext.getCurrentUserId());

        List<UrbMdlLibDtlVO> list = urbMdlLibDtlService.selectUrbMdlLibDtlList(searchVO);
        int totalCount = urbMdlLibDtlService.selectUrbMdlLibListCnt(searchVO);
        paginationInfo.setTotalRecordCount(totalCount);
        
        Map<String, Object> result = new HashMap<>();
        result.put("list", list);
        result.put("paging", paginationInfo);
        
        return ResponseEntity.ok(DefaultApiResponse.success(result, "조회되었습니다."));
    }

    /**
     * 3D 모델 라이브러리 상세 데이터 조회 (JSON)
     */
    @GetMapping("/detail.do")
    public ResponseEntity<DefaultApiResponse> getUrbMdlLibDetail(@RequestParam("libIdntfNo") int libIdntfNo) throws Exception {
        
        log.info("API: getUrbMdlLibDetail (libIdntfNo: {})", libIdntfNo);
        
        UrbMdlLibDtlVO vo = new UrbMdlLibDtlVO();
        vo.setLibIdntfNo(libIdntfNo);
        
        UrbMdlLibDtlVO resultSet = urbMdlLibDtlService.selectUrbMdlLibDetail(vo);
        
        return ResponseEntity.ok(DefaultApiResponse.success(resultSet, "조회되었습니다."));
    }
}