package incheon.com.userPageStrg.service.impl;

import incheon.com.userPageStrg.mapper.UserPageStrgMapper;
import incheon.com.userPageStrg.service.UserPageStrgService;
import incheon.com.userPageStrg.vo.UserPageStrgVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 사용자 페이지 저장 Service 구현체
 */
@Slf4j
@Service("userPageStrgService")
@RequiredArgsConstructor
public class UserPageStrgServiceImpl extends EgovAbstractServiceImpl implements UserPageStrgService {

    private final UserPageStrgMapper userPageStrgMapper;

    @Override
    public UserPageStrgVO getUserPageStrg(String userId, String pageCd) throws Exception {
        log.debug("사용자 페이지 설정 조회 - userId: {}, pageCd: {}", userId, pageCd);
        return userPageStrgMapper.selectUserPageStrg(userId, pageCd);
    }

    @Override
    @Transactional
    public int saveUserPageStrg(UserPageStrgVO vo) throws Exception {
        log.debug("사용자 페이지 설정 저장 - userId: {}, pageCd: {}", vo.getUserId(), vo.getPageCd());

        // 기존 설정 확인
        UserPageStrgVO existing = userPageStrgMapper.selectUserPageStrg(vo.getUserId(), vo.getPageCd());

        int result;
        if (existing == null) {
            // 신규 등록
            result = userPageStrgMapper.insertUserPageStrg(vo);
            log.debug("사용자 페이지 설정 신규 등록 완료 - result: {}", result);
        } else {
            // 수정
            result = userPageStrgMapper.updateUserPageStrg(vo);
            log.debug("사용자 페이지 설정 수정 완료 - result: {}", result);
        }

        return result;
    }

    @Override
    @Transactional
    public int deleteUserPageStrg(String userId, String pageCd) throws Exception {
        log.debug("사용자 페이지 설정 삭제 - userId: {}, pageCd: {}", userId, pageCd);
        int result = userPageStrgMapper.deleteUserPageStrg(userId, pageCd);
        log.debug("사용자 페이지 설정 삭제 완료 - result: {}", result);
        return result;
    }
}
