package com.jeesharp.business.modules.food.service.impl;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jeesharp.business.modules.food.entity.FoodMealMenuTemplateItemSpec;
import com.jeesharp.business.modules.food.mapper.FoodMealMenuTemplateItemSpecMapper;
import com.jeesharp.business.modules.food.service.FoodMealMenuTemplateItemSpecService;
import com.jeesharp.business.modules.food.vo.FoodMealMenuTemplateItemSpecQueryVO;
import com.jeesharp.framework.mybatis.core.service.CrudService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collection;
import java.util.List;

@Service
@Transactional(readOnly = true)
public class FoodMealMenuTemplateItemSpecServiceImpl extends CrudService<FoodMealMenuTemplateItemSpecMapper, FoodMealMenuTemplateItemSpec, FoodMealMenuTemplateItemSpecQueryVO> implements FoodMealMenuTemplateItemSpecService {

    @Override
    public List<FoodMealMenuTemplateItemSpec> listByTemplateId(String templateId) {
        if (StrUtil.isBlank(templateId)) {
            return List.of();
        }
        FoodMealMenuTemplateItemSpecQueryVO query = new FoodMealMenuTemplateItemSpecQueryVO();
        query.setTemplateId(templateId);
        query.closeDataScope();
        return findList(query);
    }

    @Override
    public List<FoodMealMenuTemplateItemSpec> listByTemplateItemIds(Collection<String> templateItemIds) {
        if (CollUtil.isEmpty(templateItemIds)) {
            return List.of();
        }
        List<String> ids = templateItemIds.stream().filter(StrUtil::isNotBlank).distinct().toList();
        if (ids.isEmpty()) {
            return List.of();
        }
        return getBaseMapper().selectList(new LambdaQueryWrapper<FoodMealMenuTemplateItemSpec>()
            .eq(FoodMealMenuTemplateItemSpec::getDelFlag, "0")
            .in(FoodMealMenuTemplateItemSpec::getTemplateItemId, ids)
            .orderByAsc(FoodMealMenuTemplateItemSpec::getSortNo));
    }

    @Override
    @Transactional(readOnly = false)
    public void deleteByTemplateId(String templateId) {
        if (StrUtil.isNotBlank(templateId)) {
            getBaseMapper().deleteByTemplateId(templateId);
        }
    }
}
