/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.springblade.modules.ycwh.wrapper;

import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.modules.ycwh.entity.*;
import org.springblade.modules.ycwh.enums.ArticleTypeEnum;
import org.springblade.modules.ycwh.service.*;
import org.springblade.modules.ycwh.vo.CollectInfoVO;

import java.util.Objects;

/**
 * 名菜名点名店收藏 包装类,返回视图层所需的字段
 *
 * @author BladeX
 * @since 2023-08-29
 */
public class CollectInfoWrapper extends BaseEntityWrapper<CollectInfoEntity, CollectInfoVO> {
	private static IInformationInfoService informationInfoService;
	private static IProfessionalStyleService professionalStyleService;
	private static IFamousStoreService famousStoreService;
	private static IFamousDishService famousDishService;
	private static IFamousSnacksService famousSnacksService;

	static {
		informationInfoService = SpringUtil.getBean(IInformationInfoService.class);
		professionalStyleService = SpringUtil.getBean(IProfessionalStyleService.class);
		famousStoreService = SpringUtil.getBean(IFamousStoreService.class);
		famousDishService = SpringUtil.getBean(IFamousDishService.class);
		famousSnacksService = SpringUtil.getBean(IFamousSnacksService.class);
	}

	public static CollectInfoWrapper build() {
		return new CollectInfoWrapper();
	}

	@Override
	public CollectInfoVO entityVO(CollectInfoEntity collectInfo) {
		CollectInfoVO vo = Objects.requireNonNull(BeanUtil.copy(collectInfo, CollectInfoVO.class));

		ArticleTypeEnum articleType = ArticleTypeEnum.getEnum(vo.getCollectType());
		switch (articleType) {
			case INFORMATION:
				InformationInfoEntity information = informationInfoService.getById(vo.getCollectId());
				if (Func.isNotEmpty(information)) {
					vo.setCover(information.getCover());
					vo.setName(information.getTitle());
				}
				break;
			case PROFESSIONAL_STYLE:
				ProfessionalStyleEntity professionalStyle = professionalStyleService.getById(vo.getCollectId());
				if (Func.isNotEmpty(professionalStyle)) {
					vo.setCover(professionalStyle.getCover());
					vo.setName(professionalStyle.getTitle());
				}
				break;
			case RESTAURANT:
				FamousStoreEntity famousStore = famousStoreService.getById(vo.getCollectId());
				if (Func.isNotEmpty(famousStore)) {
					vo.setCover(famousStore.getCover());
					vo.setName(famousStore.getName());
				}
				break;
			case DISH:
				FamousDishEntity famousDish = famousDishService.getById(vo.getCollectId());
				if (Func.isNotEmpty(famousDish)) {
					vo.setCover(famousDish.getCover());
					vo.setName(famousDish.getName());
				}
				break;
			case SNACKS:
				FamousSnacksEntity famousSnacks = famousSnacksService.getById(vo.getCollectId());
				if (Func.isNotEmpty(famousSnacks)) {
					vo.setCover(famousSnacks.getCover());
					vo.setName(famousSnacks.getName());
				}
				break;
			default:
				break;
		}
		return vo;
	}


}
