package incheon.ags.dss.green.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import incheon.ags.dss.green.vo.UrbGrnznAnlsDtlVO;
import incheon.ags.dss.green.vo.UrbGrnznAnlsMstVO;

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

    /* ========================================= */
    /* 1. 분석 마스터 (Master) 관리              */
    /* ========================================= */

    /**
     * [Check] 해당 구역(tareNo)의 분석 데이터 존재 여부 확인
     * @return anlsNo (없으면 null)
     */
	Integer selectAnlsNoByTareNo(int tareNo) throws Exception;

    /**
     * [Create] 분석 마스터 등록 (분석 실행 및 편집 초기화 공용)
     */
    void insertUrbGrnznAnlsMst(UrbGrnznAnlsMstVO vo) throws Exception;

    // [신규] 재분석 시 파라미터 업데이트
    void updateUrbGrnznAnlsMstParams(UrbGrnznAnlsMstVO vo) throws Exception;
    
    /**
     * [Read] 분석 마스터 상세 조회
     */
    UrbGrnznAnlsMstVO selectUrbGrnznAnlsMstDetail(UrbGrnznAnlsMstVO vo) throws Exception;

    /**
     * [Update] 분석 결과(면적, 필요면적 등) 재계산 및 업데이트
     */
    void updateUrbGrnznAnlsResult(UrbGrnznAnlsMstVO vo) throws Exception;

    /**
     * [Delete] 분석 마스터 삭제
     */
    void deleteUrbGrnznAnlsMst(UrbGrnznAnlsMstVO vo) throws Exception;


    /* ========================================= */
    /* 2. 녹지 공간 상세 (Detail) 관리            */
    /* ========================================= */

    /**
     * [Create-Auto] 지적도 기반 녹지 공간 자동 생성 (분석/초기화 공용)
     */
    void insertUrbGrnznAnlsDtlFromZone(UrbGrnznAnlsDtlVO vo) throws Exception;

    /**
     * [Create-Manual] 사용자 정의 녹지 공간 단건 추가 (그리기/선택/행정구역)
     * - WKT(4326) 정보를 받아 5186으로 변환 저장
     */
    void insertUrbGrnznAnlsDtl(UrbGrnznAnlsDtlVO vo) throws Exception;

    /**
     * [Read] 녹지 공간 목록 조회 (GIS 표출용)
     */
    List<UrbGrnznAnlsDtlVO> selectUrbGrnznAnlsDtlList(UrbGrnznAnlsDtlVO vo) throws Exception;

    /**
     * [Delete-Item] 사용자 정의 녹지 공간 단건 삭제
     */
    void deleteUrbGrnznAnlsDtl(UrbGrnznAnlsDtlVO vo) throws Exception;

    /**
     * [Delete-All] 해당 분석번호의 모든 상세 데이터 삭제
     */
    void deleteUrbGrnznAnlsDtlByMst(Integer anlsNo) throws Exception;
    
    // [신규] 수동 편집 데이터 일괄 삭제
    void deleteUrbGrnznAnlsDtlManual(Integer anlsNo) throws Exception;
    
    // 초기 데이터 일괄 숨김 (I -> J)
    void updateUrbGrnznAnlsDtlStatusToJ(Integer anlsNo) throws Exception;
    
    // 초기 데이터 개별 부활 (J -> I)
    void updateUrbGrnznAnlsDtlStatusToI(UrbGrnznAnlsDtlVO vo) throws Exception;

}