package incheon.ags.uis.code.service.impl;

import incheon.ags.uis.code.mapper.CodeGroupMapper;
import incheon.ags.uis.code.service.CodeGroupService;
import incheon.ags.uis.code.vo.CodeGroupVO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class CodeGroupServiceImpl implements CodeGroupService {

    private final CodeGroupMapper codeGroupMapper;

    public CodeGroupServiceImpl(CodeGroupMapper codeGroupMapper) {
        this.codeGroupMapper = codeGroupMapper;
    }

    @Override
    public List<CodeGroupVO> selectCodeGroupList(CodeGroupVO searchVO) {
        return codeGroupMapper.selectCodeGroupList(searchVO);
    }

    @Override
    public int selectCodeGroupListCount(CodeGroupVO searchVO) {
        return codeGroupMapper.selectCodeGroupListCount(searchVO);
    }

    @Override
    public CodeGroupVO selectCodeGroup(String groupCd) {
        return codeGroupMapper.selectCodeGroupByCd(groupCd);
    }

    @Transactional
    @Override
    public void insertCodeGroup(CodeGroupVO vo) {
        // ID 자동 채번 (MAX(id)+1)
        Integer nextId = codeGroupMapper.selectNextGroupId();
        vo.setId(nextId);

        // 기본값 세팅
        if (vo.getUseYn() == null || vo.getUseYn().isEmpty()) {
            vo.setUseYn("Y");
        }
        if (vo.getFrstRegId() == null || vo.getFrstRegId().isEmpty()) {
            vo.setFrstRegId(vo.getLOGIN_USER_ID());
        }
        vo.setLastMdfcnId(vo.getFrstRegId());

        codeGroupMapper.insertCodeGroup(vo);
    }

    @Transactional
    @Override
    public void updateCodeGroup(CodeGroupVO vo) {
        if (vo.getLastMdfcnId() == null || vo.getLastMdfcnId().isEmpty()) {
            vo.setLastMdfcnId(vo.getLOGIN_USER_ID());
        }
        codeGroupMapper.updateCodeGroup(vo);
    }

    @Transactional
    @Override
    public void deleteCodeGroup(String groupCd) {
        codeGroupMapper.deleteCodeGroupByCd(groupCd);
    }
}
