package incheon.ags.ias.tmap.service.impl;

import incheon.ags.ias.tmap.mapper.TmapMapper;
import incheon.ags.ias.tmap.service.TmapService;
import incheon.ags.ias.tmap.vo.TmapSearchVO;
import incheon.ags.ias.tmap.vo.TmapVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

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

/**
 * 주제도 관리 Service 구현체
 */
@Service("tmapService")
@RequiredArgsConstructor
@Slf4j
public class TmapServiceImpl extends EgovAbstractServiceImpl implements TmapService {

    private final TmapMapper tmapMapper;

    @Override
    public List<Map<String, Object>> selectTmapList(TmapSearchVO searchVO) throws Exception {
        log.debug("주제도 목록 조회 - 검색조건: {}", searchVO);
        return tmapMapper.selectTmapList(searchVO);
    }

    @Override
    public int selectTmapListCnt(TmapSearchVO searchVO) throws Exception {
        log.debug("주제도 총 개수 조회 - 검색조건: {}", searchVO);
        return tmapMapper.selectTmapListCnt(searchVO);
    }

    @Override
    public TmapVO selectTmapDetail(Long tmapSn) throws Exception {
        log.debug("주제도 상세 조회 - tmapSn: {}", tmapSn);
        return tmapMapper.selectTmapDetail(tmapSn);
    }

    @Override
    public int insertTmap(TmapVO tmapVO) throws Exception {
        log.info("주제도 등록 - tmapNm: {}", tmapVO.getTmapNm());
        validateTmapForInsert(tmapVO);
        return tmapMapper.insertTmap(tmapVO);
    }

    @Override
    public int updateTmap(TmapVO tmapVO) throws Exception {
        log.info("주제도 수정 - tmapSn: {}, tmapNm: {}", tmapVO.getTmapSn(), tmapVO.getTmapNm());
        validateTmapForUpdate(tmapVO);
        return tmapMapper.updateTmap(tmapVO);
    }

    @Override
    public int deleteTmap(Long tmapSn) throws Exception {
        log.info("주제도 삭제 - tmapSn: {}", tmapSn);
        if (tmapSn == null) {
            throw new IllegalArgumentException("주제도 일련번호는 필수입니다.");
        }
        return tmapMapper.deleteTmap(tmapSn);
    }

    /**
     * 주제도 등록 시 필수 필드 검증
     */
    private void validateTmapForInsert(TmapVO tmapVO) {
        if (!StringUtils.hasText(tmapVO.getTmapNm())) {
            throw new IllegalArgumentException("주제도명은 필수입니다.");
        }
    }

    /**
     * 주제도 수정 시 필수 필드 검증
     */
    private void validateTmapForUpdate(TmapVO tmapVO) {
        if (tmapVO.getTmapSn() == null) {
            throw new IllegalArgumentException("주제도 일련번호는 필수입니다.");
        }
        if (!StringUtils.hasText(tmapVO.getTmapNm())) {
            throw new IllegalArgumentException("주제도명은 필수입니다.");
        }
    }
}
