package incheon.ags.dss.under.service.impl;

import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import incheon.ags.dss.under.service.UrbUdgdFcltyService;
import incheon.ags.dss.under.mapper.UrbUdgdFcltyMapper;
import incheon.ags.dss.under.vo.UrbUdgdFcltyMstVO;
import incheon.ags.dss.under.vo.UrbUdgdFcltyDtlVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Service("urbUdgdFcltyService")
@RequiredArgsConstructor
@Slf4j
public class UrbUdgdFcltyServiceImpl implements UrbUdgdFcltyService {

    private final UrbUdgdFcltyMapper urbUdgdFcltyMapper;

    @Override
    @Transactional
    public int runUndergroundAnalysis(UrbUdgdFcltyMstVO vo) throws Exception {
        log.info("Starting Underground Facility Analysis for Zone: {}", vo.getTareNo());
        
        // 1. 마스터 등록 (조건 저장)
        urbUdgdFcltyMapper.insertUrbUdgdFcltyMst(vo);
        int anlsMngNo = vo.getAnlsMngNo();
        
        // 2. 상세 데이터 추출 및 적재 (ETL 쿼리)
        log.info("Executing ETL Query for Analysis No: {}", anlsMngNo);
        urbUdgdFcltyMapper.insertUrbUdgdFcltyDtl(anlsMngNo);
        
        // 3. 결과 업데이트
        urbUdgdFcltyMapper.updateUrbUdgdFcltyMstResult(anlsMngNo);
        
        return anlsMngNo;
    }

    @Override
    public List<UrbUdgdFcltyDtlVO> selectUndergroundResultList(UrbUdgdFcltyDtlVO vo) throws Exception {
        return urbUdgdFcltyMapper.selectUrbUdgdFcltyDtlList(vo);
    }
    
    @Override
    public int selectUndergroundResultCount(UrbUdgdFcltyDtlVO vo) throws Exception {
        return urbUdgdFcltyMapper.selectUrbUdgdFcltyDtlCount(vo);
    }
    
}