package incheon.product.geoview2d.search.mapper;

import incheon.com.config.annotation.MainDB;
import incheon.product.geoview2d.search.vo.AddressCoordinateVO;
import incheon.product.geoview2d.search.vo.AdmResultVO;
import incheon.product.geoview2d.search.vo.AdmSearchVO;
import incheon.product.geoview2d.search.vo.JibunSearchRequestVO;
import incheon.product.geoview2d.search.vo.JibunSearchResultVO;
import incheon.product.geoview2d.search.vo.PoiVO;
import org.apache.ibatis.annotations.Param;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;

import java.util.List;

/**
 * 통합 검색 Mapper.
 * 주소/행정구역/POI 검색을 하나의 Mapper에서 관리한다.
 */
@Mapper("productSearchMapper")
@MainDB
public interface SearchMapper {

    // ========== 주소 검색 ==========

    AddressCoordinateVO getCoordinateByBldgMngNo(String bldgMngNo);

    List<AddressCoordinateVO> getCoordinatesByBldgMngNo(@Param("bldgMngNoList") List<String> bldgMngNoList);

    List<JibunSearchResultVO> getJibunSearchInfo(JibunSearchRequestVO request);

    // ========== 행정구역 검색 ==========

    List<AdmResultVO> selectCtpList(AdmSearchVO dto);
    long selectCtpListTotCnt(AdmSearchVO dto);

    List<AdmResultVO> selectSigList(AdmSearchVO dto);
    long selectSigListTotCnt(AdmSearchVO dto);

    List<AdmResultVO> selectEmdList(AdmSearchVO dto);
    long selectEmdListTotCnt(AdmSearchVO dto);

    List<AdmResultVO> selectLiList(AdmSearchVO dto);
    long selectLiListTotCnt(AdmSearchVO dto);

    // ========== POI ==========

    PoiVO findPoiById(String nfId);

    List<PoiVO> findAllPoi();

    List<PoiVO> findPoiWithPaging(@Param("searchKeyword") String searchKeyword,
                                   @Param("searchType") String searchType,
                                   @Param("limit") int limit,
                                   @Param("offset") int offset);

    int countPoi(@Param("searchKeyword") String searchKeyword, @Param("searchType") String searchType);

    void insertPoi(PoiVO poi);

    void updatePoi(PoiVO poi);

    void deletePoi(String nfId);
}
