package com.ruoyi.jarvis.service.impl;

import java.util.List;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.jarvis.mapper.FavoriteProductMapper;
import com.ruoyi.jarvis.mapper.ErpProductRelationMapper;
import com.ruoyi.jarvis.domain.FavoriteProduct;
import com.ruoyi.jarvis.domain.ErpProductRelation;
import com.ruoyi.jarvis.service.IFavoriteProductService;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.alibaba.fastjson2.JSON;

/**
 * 常用商品Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
@Service
public class FavoriteProductServiceImpl implements IFavoriteProductService 
{
    @Autowired
    private FavoriteProductMapper favoriteProductMapper;
    
    @Autowired
    private ErpProductRelationMapper erpProductRelationMapper;

    /**
     * 查询常用商品
     * 
     * @param id 常用商品主键
     * @return 常用商品
     */
    @Override
    public FavoriteProduct selectFavoriteProductById(Long id)
    {
        FavoriteProduct favoriteProduct = favoriteProductMapper.selectFavoriteProductById(id);
        if (favoriteProduct != null) {
            // 查询关联的ERP商品
            List<ErpProductRelation> erpProducts = erpProductRelationMapper.selectErpProductRelationByFavoriteId(id);
            favoriteProduct.setErpProducts(erpProducts);
        }
        return favoriteProduct;
    }

    /**
     * 查询常用商品列表
     * 
     * @param favoriteProduct 常用商品
     * @return 常用商品
     */
    @Override
    public List<FavoriteProduct> selectFavoriteProductList(FavoriteProduct favoriteProduct)
    {
        return favoriteProductMapper.selectFavoriteProductList(favoriteProduct);
    }

    /**
     * 新增常用商品
     * 
     * @param favoriteProduct 常用商品
     * @return 结果
     */
    @Override
    public int insertFavoriteProduct(FavoriteProduct favoriteProduct)
    {
        // 设置创建用户信息
        if (favoriteProduct.getCreateUserId() == null) {
            favoriteProduct.setCreateUserId(SecurityUtils.getUserId());
        }
        if (StringUtils.isEmpty(favoriteProduct.getCreateUserName())) {
            favoriteProduct.setCreateUserName(SecurityUtils.getUsername());
        }
        
        // 设置默认值
        if (favoriteProduct.getIsTop() == null) {
            favoriteProduct.setIsTop(0);
        }
        if (favoriteProduct.getSortWeight() == null) {
            favoriteProduct.setSortWeight(0);
        }
        if (favoriteProduct.getUseCount() == null) {
            favoriteProduct.setUseCount(0);
        }
        
        return favoriteProductMapper.insertFavoriteProduct(favoriteProduct);
    }

    /**
     * 修改常用商品
     * 
     * @param favoriteProduct 常用商品
     * @return 结果
     */
    @Override
    public int updateFavoriteProduct(FavoriteProduct favoriteProduct)
    {
        return favoriteProductMapper.updateFavoriteProduct(favoriteProduct);
    }

    /**
     * 批量删除常用商品
     * 
     * @param ids 需要删除的常用商品主键
     * @return 结果
     */
    @Override
    public int deleteFavoriteProductByIds(Long[] ids)
    {
        // 先删除关联的ERP商品关系
        for (Long id : ids) {
            erpProductRelationMapper.deleteErpProductRelationByFavoriteId(id);
        }
        return favoriteProductMapper.deleteFavoriteProductByIds(ids);
    }

    /**
     * 删除常用商品信息
     * 
     * @param id 常用商品主键
     * @return 结果
     */
    @Override
    public int deleteFavoriteProductById(Long id)
    {
        // 先删除关联的ERP商品关系
        erpProductRelationMapper.deleteErpProductRelationByFavoriteId(id);
        return favoriteProductMapper.deleteFavoriteProductById(id);
    }

    /**
     * 根据SKUID查询常用商品
     * 
     * @param skuid SKUID
     * @return 常用商品
     */
    @Override
    public FavoriteProduct selectFavoriteProductBySkuid(String skuid)
    {
        return favoriteProductMapper.selectFavoriteProductBySkuid(skuid);
    }

    /**
     * 添加商品到常用列表
     * 
     * @param favoriteProduct 常用商品信息
     * @return 结果
     */
    @Override
    public int addToFavorites(FavoriteProduct favoriteProduct)
    {
        // 检查是否已经存在
        FavoriteProduct existing = favoriteProductMapper.selectFavoriteProductBySkuid(favoriteProduct.getSkuid());
        if (existing != null) {
            // 如果已存在，更新使用次数和最后使用时间
            return updateUseCountAndTime(existing.getId());
        }
        
        // 设置创建用户信息
        favoriteProduct.setCreateUserId(SecurityUtils.getUserId());
        favoriteProduct.setCreateUserName(SecurityUtils.getUsername());
        favoriteProduct.setIsTop(0);
        favoriteProduct.setSortWeight(0);
        favoriteProduct.setUseCount(1);
        favoriteProduct.setLastUsedTime(DateUtils.getTime());
        
        return favoriteProductMapper.insertFavoriteProduct(favoriteProduct);
    }

    /**
     * 从常用列表移除商品
     * 
     * @param skuid SKUID
     * @return 结果
     */
    @Override
    public int removeFromFavorites(String skuid)
    {
        FavoriteProduct existing = favoriteProductMapper.selectFavoriteProductBySkuid(skuid);
        if (existing != null) {
            return deleteFavoriteProductById(existing.getId());
        }
        return 0;
    }

    /**
     * 更新使用次数和最后使用时间
     * 
     * @param id 常用商品ID
     * @return 结果
     */
    @Override
    public int updateUseCountAndTime(Long id)
    {
        return favoriteProductMapper.updateUseCountAndTime(id);
    }

    /**
     * 更新置顶状态
     * 
     * @param id 常用商品ID
     * @param isTop 是否置顶
     * @return 结果
     */
    @Override
    public int updateTopStatus(Long id, Integer isTop)
    {
        FavoriteProduct favoriteProduct = new FavoriteProduct();
        favoriteProduct.setId(id);
        favoriteProduct.setIsTop(isTop);
        return favoriteProductMapper.updateTopStatus(favoriteProduct);
    }

    /**
     * 批量置顶/取消置顶
     * 
     * @param ids 常用商品ID数组
     * @param isTop 是否置顶
     * @return 结果
     */
    @Override
    public int batchUpdateTopStatus(Long[] ids, Integer isTop)
    {
        int result = 0;
        for (Long id : ids) {
            result += updateTopStatus(id, isTop);
        }
        return result;
    }

    /**
     * 查询用户的常用商品列表（按置顶和排序权重排序）
     * 
     * @param createUserId 创建用户ID
     * @return 常用商品集合
     */
    @Override
    public List<FavoriteProduct> selectUserFavoriteProducts(Long createUserId)
    {
        return favoriteProductMapper.selectUserFavoriteProducts(createUserId);
    }

    /**
     * 根据线报消息创建常用商品
     * 
     * @param xbMessageItem 线报消息项
     * @return 结果
     */
    @Override
    public int createFromXbMessage(Object xbMessageItem)
    {
        // 这里需要根据实际的线报消息结构来解析数据
        // 暂时返回0，具体实现需要根据实际数据结构调整
        return 0;
    }

    /**
     * 快速发品（从常用商品）
     * 
     * @param id 常用商品ID
     * @param appid ERP应用ID
     * @return 结果
     */
    @Override
    public Object quickPublishFromFavorite(Long id, String appid)
    {
        // 更新使用次数和最后使用时间
        updateUseCountAndTime(id);
        
        // 这里可以调用实际的发品接口
        // 暂时返回成功信息
        return "发品请求已提交，应用ID: " + appid;
    }

    /**
     * 更新发品信息
     * 
     * @param favoriteProduct 常用商品信息
     * @return 结果
     */
    @Override
    public int updateProductInfo(FavoriteProduct favoriteProduct)
    {
        return favoriteProductMapper.updateProductInfo(favoriteProduct);
    }
}
