package incheon.uis.uld.mapper;

import org.apache.ibatis.annotations.Select;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;

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

@org.egovframe.rte.psl.dataaccess.mapper.Mapper @incheon.com.config.annotation.MainDB public interface UisIncheonServiceMapper {
	/**
	 * user_layers 테이블의 모든 활성 레이어 조회
	 * @return 모든 활성 레이어 목록
	 */
	@Select("""
	    SELECT layer_id, layer_name, layer_type
	    FROM incheon_geo.user_layers 
	    WHERE is_active = true
	    ORDER BY layer_id ASC
	    """)
	List<Map<String, Object>> selectAllUserLayers();
	
    /**
     * layer_id를 기반으로 layer_name 조회
     * @param id 레이어 ID
     * @return layer_name
     */
    @Select("""
        SELECT layer_name
        FROM incheon_geo.user_layers
        WHERE layer_id = #{id}
        """)
    String selectLayerNameById(Long id);
    
    /**
     * layer_id를 기반으로 layer_type 조회
     * @param id 레이어 ID
     * @return layer_type
     */
    @Select("""
        SELECT layer_type
        FROM incheon_geo.user_layers
        WHERE layer_id = #{id}
        """)
    String selectLayerTypeById(Long id);
    
    /**
     * layer_id를 기반으로 srid 조회
     * @param id 레이어 ID
     * @return srid
     */
    @Select("""
        SELECT srid
        FROM incheon_geo.user_layers
        WHERE layer_id = #{id}
        """)
    String selectSridById(Long id);
    
    /**
     * layer_name을 기반으로 geom 제외한 속성 컬럼 조회
     * @param layerName 레이어 이름
     * @return 컬럼명과 타입 정보
     */
    @Select("""
        SELECT column_name,
               data_type,
		       character_maximum_length,
		       numeric_precision,
		       numeric_scale,
		       is_nullable
        FROM information_schema.columns 
        WHERE table_schema = 'public' AND table_name = #{layerName}
        AND column_name != 'geom'
        ORDER BY ordinal_position
        """)
    List<Map<String, Object>> selectColumnsExcludeGeomByLayerName(String layerName);
}
