package com.zioinfo.kintex.module.m4.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 배선 공간 매퍼 — 트렌치 최단 배선(PostGIS).
 * <b>TODO(kintex-db-engineer)</b>: resources/mybatis/mapper/WiringMapper.xml (M4-1).
 * 트렌치는 geometry(POINT), 배선은 geometry(LINESTRING). 최근접 트렌치=ST_Distance/&lt;-&gt; KNN,
 * 최단 경로 길이=ST_Length. 홀별 공급 매트릭스(홀1·7 가스 등)·가정 그리드 여부 플래그 포함.
 */
@Mapper
public interface WiringMapper {

    /** 부스 위치 기준 최근접 트렌치 포인트 조회(kind별 공급 가능 트렌치). */
    List<Map<String, Object>> findNearestTrenches(@Param("hallId") String hallId,
                                                  @Param("boothId") String boothId,
                                                  @Param("kind") String kind);

    /** 단말→트렌치 최단 배선 경로 산출(ST_MakeLine / 라우팅) → coords·lengthM 반환. */
    Map<String, Object> shortestPath(@Param("hallId") String hallId,
                                     @Param("fromX") double fromX,
                                     @Param("fromY") double fromY,
                                     @Param("kind") String kind);

    /** 홀 트렌치 좌표가 실측이 아닌 '가정 그리드'인지 여부(PLANNING R4). */
    Boolean isAssumedTrench(@Param("hallId") String hallId);
}
