package com.madeu.common.service.impl;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.madeu.common.service.MenuAuthService;
import com.madeu.constants.Constants;
import com.madeu.dao.web.webauthmenurelation.WebAuthMenuRelationSqlMapDAO;
import com.madeu.dao.web.webmember.WebMemberSqlMapDAO;
import com.madeu.util.ValidationCheckUtil;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class MenuAuthServiceImpl implements MenuAuthService {
	
	@Autowired
    private WebMemberSqlMapDAO webMemberSqlMapDAO;

    @Autowired
    private WebAuthMenuRelationSqlMapDAO webAuthMenuRelationSqlMapDAO;
	
	/**
	 * 메뉴 권한 조회 메소드
	 * @param paramMap 파라미터 맵 (loginMemberId, menuClass 포함)
	 * @return 권한 정보를 포함한 결과 맵
	 * @throws Exception 처리 중 발생한 예외
	 */
	public HashMap<String, Object> getMenuAuthority(Map<String, Object> paramMap) throws Exception {
	    HashMap<String, Object> map = new HashMap<String, Object>();

	    log.debug("loginMemberId       :" + paramMap.get("loginMemberId"));
	    log.debug("menuClass           :" + paramMap.get("menuClass"));

	    try {
	        boolean check = true;
	        String menuClass = String.valueOf(paramMap.get("menuClass"));

	        // 메뉴 클래스 유효성 검증
	        if (!ValidationCheckUtil.emptyCheck(menuClass)) {
	            check = false;
	            map.put("msgCode", Constants.FAIL);
	            map.put("msgDesc", "메뉴 정보가 없습니다.");
	        }

	        if (check) {
	            // 사용자 확인
	            List<Map<String, Object>> userListMap = webMemberSqlMapDAO.checkMember((HashMap<String, Object>) paramMap);
	            int userListMapSize = userListMap.size();

	            if (userListMapSize == 1) {
	                paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
	            } else {
	                check = false;
	                map.put("msgCode", Constants.FAIL);
	                map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
	            }
	        }

	        if (check) {
	            // 권한 조회
	            HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
	            authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
	            authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
	            
	            List<Map<String, Object>> authMenuRelationlistMap = 
	                webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
	            int authMenuRelationlistMapSize = authMenuRelationlistMap.size();

	            if (authMenuRelationlistMapSize == 1) {
	                map.put("msgCode", Constants.OK);
	                map.put("success", "true");

	                // 권한 정보 설정
	                Map<String, Object> authInfo = authMenuRelationlistMap.get(0);
	                map.put("selectUseYn", authInfo.get("selectUseYn"));
	                map.put("insertUseYn", authInfo.get("insertUseYn"));
	                map.put("updateUseYn", authInfo.get("updateUseYn"));
	                map.put("deleteUseYn", authInfo.get("deleteUseYn"));
	                map.put("downloadUseYn", authInfo.get("downloadUseYn"));
	            } else {
	                map.put("msgCode", Constants.FAIL);
	                map.put("msgDesc", "권한 정보가 없습니다.");
	            }
	        }
	    } catch (Exception e) {
	        log.error("메뉴 권한 조회 중 오류 발생", e);
	        map.put("msgCode", Constants.FAIL);
	        map.put("msgDesc", "시스템 오류가 발생했습니다.");
	        throw e;
	    }

	    return map;
	}
}
