package incheon.ags.dss.common.web;

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

import incheon.com.cmm.api.DefaultApiResponse;
// import incheon.com.cmm.util.RequestContext; // (로그인 ID용)

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
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.common.service.DssCommonService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Tag(name = "DSS 공통", description = "행정구역(구/동) 목록 조회 및 공간 분석 공통 API")
@RestController 
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/api/v1/dss/common")
public class DssCommonApiController {

    private final DssCommonService svc;

    // 1. '구' 목록 조회 API
    @Operation(summary = "자치구 목록 조회", description = "인천광역시 내 자치구(Gu) 목록을 조회합니다.")
    @GetMapping("/guList.do")
    public ResponseEntity<DefaultApiResponse> getGuList() throws Exception {
        List<Map<String, Object>> list = svc.selectGuList();
        return ResponseEntity.ok(DefaultApiResponse.success(list));
    }
    
    // 2. '동' 목록 조회 API
    @Operation(summary = "행정동 목록 조회", description = "선택한 자치구(시군구코드)에 해당하는 행정동 목록을 조회합니다.")
    @GetMapping("/dongList.do")
    public ResponseEntity<DefaultApiResponse> getDongList(
            @Parameter(description = "시군구 코드 (예: 28110)", required = true, example = "28110") 
            @RequestParam String sigCd) throws Exception {
        List<Map<String, Object>> list = svc.selectDongList(sigCd);
        return ResponseEntity.ok(DefaultApiResponse.success(list));
    }
    
    @Operation(summary = "행정동 상세/좌표 조회", description = "행정동 코드(emdCd)를 기반으로 해당 동의 중심 좌표 및 상세 정보를 조회합니다.")
    @GetMapping("/getEmdData.do")
    public ResponseEntity<DefaultApiResponse> getEmdData(
            @Parameter(description = "행정동 코드", required = true, example = "28110510")
            @RequestParam String emdCd) throws Exception {
        return ResponseEntity.ok(
                DefaultApiResponse.success(svc.selectEmdDataForDetail(emdCd), "행정동 좌표가 조회되었습니다.")
            );
    }
    
    /**
     * 사용자가 그린 영역(geom)과 교차하는 행정구역/지적도 목록을 반환
     * @param params (geom: "POLYGON(...)", layerType: 'emd', 'cadastral')
     */
    @Operation(summary = "교차 영역 분석", description = "사용자가 그린 영역(WKT)과 교차하는 행정구역 또는 지적도 목록을 반환합니다.")
    @PostMapping("/findIntersectingArea.do")
    public ResponseEntity<DefaultApiResponse> findIntersectingArea(
            @Parameter(description = "요청 파라미터 (geom: WKT Polygon 문자열, layerType: 'emd' 또는 'cadastral')", required = true)
            @RequestBody Map<String, Object> params) throws Exception {
        return ResponseEntity.ok(
                DefaultApiResponse.success(svc.findIntersectingArea(params), "교차 영역이 조회되었습니다.")
            );
    }
}