package incheon.ags.dss.regen.mapper;

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

import org.egovframe.rte.psl.dataaccess.mapper.Mapper;

import incheon.ags.dss.regen.vo.UrbTrgtClsfMstVO;
import incheon.ags.dss.regen.vo.UrbTrgtClsfDtlVO;

@Mapper
@incheon.com.config.annotation.MainDB
public interface UrbTrgtClsfMapper {

    // ---------------------------------------------------------------------
    // 1. 대상분류 마스터 (urb_trgt_clsf_mst)
    // ---------------------------------------------------------------------

    /**
     * 대상분류 마스터 목록 조회
     *  - LOGIN_USER_ID 사용
     */
    List<UrbTrgtClsfMstVO> selectUrbTrgtClsfMstList(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 대상분류 마스터 목록 건수
     */
    int selectUrbTrgtClsfMstListCnt(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 대상분류 마스터 등록
     *  - trgtClsfNm, userDsgnYn, mdlAtrbCd, LOGIN_USER_ID 사용
     */
    void insertUrbTrgtClsfMst(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 대상분류 마스터 수정
     */
    void updateUrbTrgtClsfMst(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 대상분류 마스터 삭제 (필요 시)
     */
    void deleteUrbTrgtClsfMst(UrbTrgtClsfMstVO vo) throws Exception;


    // ---------------------------------------------------------------------
    // 2. 좌표 클릭 → 필지/시설 정보 조회
    //    (시설명, 필지고유번호, 지번 geom)
    // ---------------------------------------------------------------------

    /**
     * 좌표 기준 필지/시설 정보 조회
     *  - 파라미터: "lon", "lat" (WGS84 경/위도)
     *  - 결과   : UrbTrgtClsfDtlVO (fcltNm, ltlndUnqNo, geom, geomJson)
     */
    UrbTrgtClsfDtlVO selectUrbTrgtParcelByPoint(Map<String, Object> param) throws Exception;


    // ---------------------------------------------------------------------
    // 3. 대상분류 상세 (urb_trgt_clsf_dtl)
    // ---------------------------------------------------------------------

    /**
     * 대상분류 상세 등록
     */
    void insertUrbTrgtClsfDtl(UrbTrgtClsfDtlVO vo) throws Exception;

    /**
     * 대상분류 상세 목록 조회 (페이징)
     */
    List<UrbTrgtClsfDtlVO> selectUrbTrgtClsfDtlList(UrbTrgtClsfDtlVO vo) throws Exception;

    /**
     * 대상분류 상세 목록 건수
     */
    int selectUrbTrgtClsfDtlListCnt(UrbTrgtClsfDtlVO vo) throws Exception;

    /**
     * 대상분류 상세 단건 삭제 (상세번호 기준)
     */
    void deleteUrbTrgtClsfDtlItem(Integer trgtClsfDtlNo) throws Exception;

    /**
     * 대상분류 번호 기준 상세 전체 삭제 (필요 시)
     */
    void deleteUrbTrgtClsfDtlByClsfNo(UrbTrgtClsfDtlVO vo) throws Exception;

    /**
     * [Java Conversion] 대상 분류 생성을 위한 시설물 후보군 조회
     * - 구역 반경 200m 내 용도 코드에 맞는 시설물 조회
     */
    List<UrbTrgtClsfDtlVO> selectTargetFacilitiesForCreation(Map<String, Object> params);

    /**
     * [Java Conversion] 대상 분류 상세 일괄 등록 (Batch)
     */
    void insertUrbTrgtClsfDtlBatch(List<UrbTrgtClsfDtlVO> list);
}