package com.xmomen.module.base.service.impl;

import com.xmomen.module.base.mapper.CouponCategoryMapper;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.xmomen.framework.mybatis.dao.MybatisDao;
import com.xmomen.framework.mybatis.page.Page;
import com.xmomen.module.base.entity.CdCouponCategory;
import com.xmomen.module.base.entity.CdCouponCategoryExample;
import com.xmomen.module.base.entity.CdCouponCategoryExample.Criteria;
import com.xmomen.module.base.entity.CdCouponCategoryRef;
import com.xmomen.module.base.entity.CdCouponCategoryRefExample;
import com.xmomen.module.base.model.CouponCategoryRefModel;
import com.xmomen.module.base.model.CreateCouponCategory;
import com.xmomen.module.base.model.UpdateCouponCategory;
import com.xmomen.module.base.service.CouponCategoryService;
@Service
public class CouponCategoryServiceImpl implements CouponCategoryService {
	@Autowired
	MybatisDao mybatisDao;
	
	// 根据关键字、分类类型、限制和偏移量获取优惠券分类列表
	 public Page<CdCouponCategory> getCouponCategoryList(String keyword,Integer categoryType, Integer limit, Integer offset){
	        CdCouponCategoryExample cdCouponCategoryExample = new CdCouponCategoryExample();
	        // 创建查询条件，根据关键字模糊查询分类名称
	        Criteria couponCategoryCriteria = cdCouponCategoryExample.createCriteria().andCategoryNameLike("%" + StringUtils.trimToEmpty(keyword) + "%");
	        // 如果分类类型不为空，则添加分类类型查询条件
	        if(categoryType != null){
	        	couponCategoryCriteria.andCategoryTypeEqualTo(categoryType);
	        }
	       
	        // 根据查询条件和限制、偏移量获取优惠券分类列表
	        return mybatisDao.selectPageByExample(cdCouponCategoryExample, limit, offset);
	    }
	
	// 根据id获取优惠券分类
	 public CdCouponCategory getCouponCategory(Integer id){
	        // 根据id查询优惠券分类
	        return mybatisDao.selectByPrimaryKey(CdCouponCategory.class, id);
	 }
	
	// 创建优惠券分类
	@Override
	@Transactional
	public CdCouponCategory createCouponCategory(CreateCouponCategory createCouponCategory) {
		CdCouponCategory category = new CdCouponCategory();
		// 设置优惠券分类名称和分类类型
		category.setCategoryName(createCouponCategory.getCategoryName());
		category.setCategoryType(createCouponCategory.getCategoryType());
		// 保存优惠券分类
		category = mybatisDao.saveByModel(category);
		// 如果优惠券分类关联的商品不为空，则保存关联的商品
		if(createCouponCategory.getCategoryRefs() != null){
			for(CouponCategoryRefModel categoryRefVo : createCouponCategory.getCategoryRefs()){
				CdCouponCategoryRef categoryRef = new CdCouponCategoryRef();
				// 设置关联的优惠券分类id、关联类型、关联值、关联名称和数量
				categoryRef.setCdCouponCategoryId(category.getId());
				categoryRef.setRefType(CouponCategoryMapper.COUPON_RELATION_ITEM_CODE);
				categoryRef.setRefValue(categoryRefVo.getCdItemId()+"");
				categoryRef.setRefName("消费劵固定产品");
				categoryRef.setRefCount(categoryRefVo.getCount());
				// 保存关联的商品
				mybatisDao.save(categoryRef);
			}
		}
		return category;
	}
	// 更新优惠券分类
	@Transactional
	public CdCouponCategory updateCouponCategory(Integer id, UpdateCouponCategory updateCouponCategory) {
		CdCouponCategory category = new CdCouponCategory();
		// 设置优惠券分类id、名称和分类类型
		category.setId(id);
		category.setCategoryName(updateCouponCategory.getCategoryName());
		category.setCategoryType(updateCouponCategory.getCategoryType());
		// 更新优惠券分类
		category = mybatisDao.updateByModel(category);
		// 如果优惠券分类关联的商品不为空，则先删除再添加关联的商品
		if(updateCouponCategory.getCategoryRefs() != null){
			//先删除再添加
			CdCouponCategoryRefExample categoryRefExample = new CdCouponCategoryRefExample();
			categoryRefExample.createCriteria().andCdCouponCategoryIdEqualTo(id);
			mybatisDao.deleteByExample(categoryRefExample);
			for(CouponCategoryRefModel categoryRefVo : updateCouponCategory.getCategoryRefs()){
				CdCouponCategoryRef categoryRef = new CdCouponCategoryRef();
				categoryRef.setCdCouponCategoryId(category.getId());
				categoryRef.setRefType(CouponCategoryMapper.COUPON_RELATION_ITEM_CODE);
				categoryRef.setRefValue(categoryRefVo.getCdItemId()+"");
				categoryRef.setRefName("消费劵固定产品");
				categoryRef.setRefCount(categoryRefVo.getCount());
				mybatisDao.save(categoryRef);
			}
		}
		return mybatisDao.updateByModel(category);
	}
	@Transactional
	public void delete(Integer id) {
		 mybatisDao.deleteByPrimaryKey(CdCouponCategory.class, id);		
	}

}
