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

import incheon.com.cmm.api.DefaultApiResponse;
import incheon.ags.dss.regen.service.UrbMdlMstService;
import incheon.ags.dss.regen.vo.UrbMdlMstVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@RestController 
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/api/v1/dss/urb/mdlMst")
public class UrbMdlMstApiController {

    private final UrbMdlMstService urbMdlService;

    /**
     * 모델 배치 목록 조회 (JSON)
     */
    @GetMapping("/list.do")
    public ResponseEntity<DefaultApiResponse> getUrbMdlList(
            @ModelAttribute UrbMdlMstVO searchVO) throws Exception {
        
        if (searchVO.getZoneNo() <= 0) {
            // return ResponseEntity.badRequest()...;
        }
        
        log.info("API: getUrbMdlList (ZoneNo: {}, Page: {})", searchVO.getZoneNo(), searchVO.getPageIndex());
        
        PaginationInfo paginationInfo = new PaginationInfo();
        paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
        paginationInfo.setRecordCountPerPage(searchVO.getRecordCountPerPage());
        paginationInfo.setPageSize(searchVO.getPageSize());
        searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());

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

    /**
     * 모델 배치 상세 조회 (JSON)
     */
    @GetMapping("/detail.do")
    public ResponseEntity<DefaultApiResponse> getUrbMdlDetail(@RequestParam("mdlNo") String mdlNo) throws Exception {
        
        log.info("API: getUrbMdlDetail (mdlNo: {})", mdlNo);
        
        UrbMdlMstVO vo = new UrbMdlMstVO();
        vo.setMdlNo(mdlNo);
        
        UrbMdlMstVO resultSet = urbMdlService.selectUrbMdlMstDetail(vo);
        
        return ResponseEntity.ok(DefaultApiResponse.success(resultSet, "조회되었습니다."));
    }

    /**
     * 모델 배치 저장 (등록/수정)
     */
    @PostMapping("/save.do")
    public ResponseEntity<DefaultApiResponse> saveUrbMdl(
            @RequestBody UrbMdlMstVO vo,
            HttpServletRequest request) throws Exception {
        
        log.info("API: saveUrbMdl (mdlSe: {}, zoneNo: {})", vo.getMdlSe(), vo.getZoneNo());
        // vo.setLOGIN_USER_ID("ADMIN"); 
        
        String mdlNo = urbMdlService.saveUrbMdlMst(vo);
        
        Map<String, Object> result = new HashMap<>();
        result.put("message", "저장되었습니다.");
        result.put("mdlNo", mdlNo);
        
        return ResponseEntity.ok(DefaultApiResponse.success(result, "저장되었습니다."));
    }

    /**
     * 모델 배치 삭제
     */
    @PostMapping("/delete.do")
    public ResponseEntity<DefaultApiResponse> deleteUrbMdl(
            @RequestParam("mdlNo") String mdlNo,
            HttpServletRequest request) throws Exception {
        
        log.info("API: deleteUrbMdl (mdlNo: {})", mdlNo);
        
        UrbMdlMstVO vo = new UrbMdlMstVO();
        vo.setMdlNo(mdlNo);
        
        urbMdlService.deleteUrbMdlMst(vo);
        
        return ResponseEntity.ok(DefaultApiResponse.success(null, "삭제되었습니다."));
    }
}