package incheon.com.security.service.impl;

import incheon.com.security.mapper.MaintenanceLoginMapper;
import incheon.com.security.service.MaintenanceLoginService;
import incheon.com.security.vo.UserAuthrtVO;
import incheon.com.security.vo.UserRoleVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;

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

/**
 * 유지보수 로그인 서비스 구현체
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class MaintenanceLoginServiceImpl extends EgovAbstractServiceImpl implements MaintenanceLoginService {

    private final MaintenanceLoginMapper maintenanceLoginMapper;

    @Override
    public List<Map<String, Object>> getActiveSystems() {
        try {
            return maintenanceLoginMapper.selectActiveSystems();
        } catch (Exception e) {
            log.error("[MAINTENANCE] 시스템 목록 조회 오류", e);
            return Collections.emptyList();
        }
    }

    @Override
    public List<UserRoleVO> getAllActiveRoles() {
        try {
            List<UserRoleVO> roles = maintenanceLoginMapper.selectAllActiveRoles();
            roles.forEach(r -> r.setRoleType("MAINTENANCE"));
            return roles;
        } catch (Exception e) {
            log.error("[MAINTENANCE] 전체 역할 조회 오류", e);
            return Collections.emptyList();
        }
    }

    @Override
    public List<UserAuthrtVO> getAuthrtsByRoleCds(List<String> roleCds) {
        try {
            if (roleCds == null || roleCds.isEmpty()) {
                return Collections.emptyList();
            }
            return maintenanceLoginMapper.selectAuthrtsByRoleCds(roleCds);
        } catch (Exception e) {
            log.error("[MAINTENANCE] 역할 기반 권한 조회 오류 - roleCds: {}", roleCds.size(), e);
            return Collections.emptyList();
        }
    }

    @Override
    public List<Map<String, Object>> getRolesBySysCd(String sysCd) {
        try {
            return maintenanceLoginMapper.selectRolesBySysCd(sysCd);
        } catch (Exception e) {
            log.error("[MAINTENANCE] 역할 목록 조회 오류 - sysCd: {}", sysCd, e);
            return Collections.emptyList();
        }
    }

    @Override
    public List<Map<String, Object>> getRoleTypeCodes() {
        try {
            return maintenanceLoginMapper.selectRoleTypeCodes();
        } catch (Exception e) {
            log.error("[MAINTENANCE] 역할 타입 코드 조회 오류", e);
            return Collections.emptyList();
        }
    }
}
