//const DOMAIN = "http://dotest.kfems.kr:9997/";
const DOMAIN = '';
// const DOMAIN = "/";

const ROUTE_URL = {
	myIndex: '/',
};

export const state = () => Object.assign({}, ROUTE_URL);

export const actions = {
	// 사업장 목록 조회 selectBlocMstrCodeList
	// getBlocMstrList({ state, dispatch, commit }, payload) {
	//   const res = this.$axios.post(
	//     DOMAIN + "comm/MenuMngCtr/selectMenu",
	//     payload || {}
	//   );
	//   res
	//     .then(value => {
	//       // dispatch("addInx", value.data.dataset.blocCodeLists).then(list => {
	//         // commit(
	//         //   "setPageData",
	//         //   { blocMstrList: list, blocCd: 0 },
	//         //   { root: true }
	//         // );
	//       // });
	//     })
	//     .catch(error => console.log(error));
	//   // .finally(() => console.log("end"));
	// },

	async getMenu({ state, dispatch, commit }, payload) {
		// console.log(payload);
		const headers = {
			headers: {
				'X-Fems-MenuId': 'MNU0001',
			},
		};
		const params = { params: payload || {} };
		const res = await this.$axios.post(
			DOMAIN + 'comm/base/MenuMngCtr/selectAuthMenu',
			params,
			headers,
		);
		// const params = { params: payload || {} };
		// const res = await this.$axios.post(
		//   DOMAIN + "comm/MenuMngCtr/selectMenu",
		//   params
		// );
		// console.log(res);
		const list = res.data.dataset.menuList;

		let myMenu = [];
		if (list.length > 0) {
			myMenu = list
				// .filter(ele => {
				//   return ele.useFg === "1";
				// }) // 사용 설정된것만 => 실제로 사용되는 값만 들어오면 삭제
				.map((item, i) => ({
					...item,
					id: item.prgmId || i,
					upMenuId: item.upMenuId || item.menuNm,
					// title: item.menuNm
					// icon: '', // 아이콘은,. 값을 받아오지 않는 이상 별도로 상수화해서 prgmId 값을 키로 꺼내써야 할듯,
					to: state[item.prgmId],
					// to: '' // 경로는,. 값을 받아오지 않는 이상 아이콘과 마찬가지로 짝지어 상수화 하거나 sysDivCd, prgmId 값 등을 이용해 조합해서 route를 구성해야 할듯,
				}));

			// console.log("myMenu::", myMenu);
		}

		dispatch('setMenuTree', myMenu);
		commit(
			'setMenuItems',
			myMenu.reduce(
				(acc, it) => ({
					...acc,
					[it.prgmId]: it,
				}),
				{},
			),
			{ root: true },
		);
	},

	// 메뉴 트리 세팅
	async setMenuTree({ commit }, payload) {
		// console.log("setTree::res = ", res);
		let tmpLsit = [];
		if (payload.length > 0) {
			tmpLsit = payload
				.map(item => ({
					...item,
					children: [],
				}))
				.reduce(
					// 동일한 부모를 가진 object 끼리 묶기
					(acc, it) => ({
						...acc,
						[it.upMenuId]: acc[it.upMenuId] ? [...acc[it.upMenuId], it] : [it],
					}),
					{},
				);
			Object.getOwnPropertyNames(tmpLsit)
				.reverse()
				.forEach(function(val, idx, array) {
					array.map(obj => {
						tmpLsit[obj].filter(v => {
							if (val === v.menuId) {
								// 부모 키와 동일한 값을 가지고 있는 목록의 children 에 추가
								v.children = tmpLsit[val];
							}
							if (val === obj && v.children.length === 0) {
								// 자식이 없느면 삭제
								delete v.children;
							}
						});
					});
				});
		}
		// console.log(tmpLsit["0"]);
		commit('setTreevieItems', tmpLsit['0'], { root: true });
	},
};
