package go.kr.project.system.user.service.impl;

import go.kr.project.system.group.model.GroupSearchVO;
import go.kr.project.system.group.model.GroupVO;
import go.kr.project.system.user.mapper.UserMapper;
import go.kr.project.system.user.model.SystemUserSearchVO;
import go.kr.project.system.user.model.SystemUserVO;
import go.kr.project.system.user.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * packageName    : go.kr.project.system.user.service.impl
 * fileName       : UserServiceImpl
 * author         : 박성영
 * date           : 25. 5. 7.
 * description    : 사용자 관련 비즈니스 로직을 처리하는 서비스 구현체
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 25. 5. 7.        박성영       최초 생성
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class UserServiceImpl extends EgovAbstractServiceImpl implements UserService {

    private final UserMapper tbUserMapper;

    /**
     * 사용자 계정 중복을 조회합니다.
     *
     * @param userAcnt 사용자 계정
     * @return 중복 숫자
     */
    @Override
    public int selectUserAcntDuplicateCheck(String userAcnt){ return tbUserMapper.selectUserAcntDuplicateCheck(userAcnt); }

    /**
     * 사용자 정보를 조회합니다.
     * 
     * @param selectUserId 사용자 ID
     * @return 사용자 정보
     */
    @Override
    public SystemUserVO selectUser(String selectUserId) {
        return tbUserMapper.selectUser(selectUserId);
    }

    /**
     * 사용자 목록을 조회합니다.
     * 
     * @param paramVO 검색 조건을 담은 VO 객체
     * @return 사용자 목록
     */
    @Override
    public List<SystemUserVO> selectUserList(SystemUserSearchVO paramVO) {
        return tbUserMapper.selectUserList(paramVO);
    }

    /**
     * 사용자 목록의 총 개수를 조회합니다.
     * 
     * @param paramVO 검색 조건을 담은 VO 객체
     * @return 사용자 목록의 총 개수
     */
    @Override
    public int selectUserListTotalCount(SystemUserSearchVO paramVO) {
        return tbUserMapper.selectUserListTotalCount(paramVO);
    }

    /**
     * 사용자 ID를 생성합니다.
     * 
     * @return USER00000001 형태의 사용자 ID
     */
    @Override
    public String generateUserId() {
        return tbUserMapper.generateUserId();
    }

    /**
     * 사용자 정보를 등록합니다.
     * 
     * @param vo 등록할 사용자 정보를 담은 VO 객체
     * @return 등록된 행의 수
     */
    @Override
    public int insertUser(SystemUserVO vo) {
        return tbUserMapper.insertUser(vo);
    }

    /**
     * 사용자 정보를 수정합니다.
     * 
     * @param vo 수정할 사용자 정보를 담은 VO 객체
     * @return 수정된 행의 수
     */
    @Override
    public int updateUser(SystemUserVO vo) {
        return tbUserMapper.updateUser(vo);
    }

    /**
     * 사용자 비밀번호를 변경합니다.
     *
     * @param vo 비밀번호 변경 정보를 담은 VO 객체
     * @return 업데이트된 행의 수
     */
    @Override
    public int updatePassword(SystemUserVO vo) {
        return tbUserMapper.updatePassword(vo);
    }

    /**
     * 그룹 목록을 조회합니다.
     *
     * @param vo 검색 조건을 담은 VO 객체
     * @return 그룹 목록
     */
    @Override
    public List<GroupVO> selectGroupList(GroupSearchVO vo) {
        return tbUserMapper.selectGroupList(vo);
    }

    /**
     * 사용자 잠금을 해제합니다.
     * 
     * @param userId 사용자 ID
     * @return 수정된 행의 수
     */
    @Override
    public int unlockUser(String userId) {
        return tbUserMapper.unlockUser(userId);
    }

}
