package com.fs.store.service.impl;

import java.util.Collections;
import java.util.Date;
import java.util.List;

import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil;
import com.fs.common.core.domain.R;
import com.fs.common.utils.DateUtils;
import com.fs.common.utils.ParseUtils;
import com.fs.store.domain.FsStoreOrderItem;
import com.fs.store.domain.FsStoreOrderOfflineItem;
import com.fs.store.mapper.FsStoreOrderOfflineItemMapper;
import com.fs.store.param.FsStoreOrderOfflineCreateParam;
import com.fs.store.param.FsStoreOrderOfflineParam;
import com.fs.store.vo.FsStoreOrderOfflineListVO;
import com.fs.store.vo.FsStoreProductAttrValueVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fs.store.mapper.FsStoreOrderOfflineMapper;
import com.fs.store.domain.FsStoreOrderOffline;
import com.fs.store.service.IFsStoreOrderOfflineService;

/**
 * 线下订单Service业务层处理
 *
 * @author fs
 * @date 2024-10-29
 */
@Service
public class FsStoreOrderOfflineServiceImpl implements IFsStoreOrderOfflineService
{
    @Autowired
    private FsStoreOrderOfflineMapper fsStoreOrderOfflineMapper;
    @Autowired
    private FsStoreOrderOfflineItemMapper fsStoreOrderOfflineItemMapper;

    /**
     * 查询线下订单
     *
     * @param orderId 线下订单ID
     * @return 线下订单
     */
    @Override
    public FsStoreOrderOffline selectFsStoreOrderOfflineById(Long orderId)
    {
        return fsStoreOrderOfflineMapper.selectFsStoreOrderOfflineById(orderId);
    }

    /**
     * 查询线下订单列表
     *
     * @param fsStoreOrderOffline 线下订单
     * @return 线下订单
     */
    @Override
    public List<FsStoreOrderOffline> selectFsStoreOrderOfflineList(FsStoreOrderOffline fsStoreOrderOffline)
    {
        return fsStoreOrderOfflineMapper.selectFsStoreOrderOfflineList(fsStoreOrderOffline);
    }

    /**
     * 新增线下订单
     *
     * @param fsStoreOrderOffline 线下订单
     * @return 结果
     */
    @Override
    public int insertFsStoreOrderOffline(FsStoreOrderOffline fsStoreOrderOffline)
    {
        fsStoreOrderOffline.setCreateTime(DateUtils.getNowDate());
        return fsStoreOrderOfflineMapper.insertFsStoreOrderOffline(fsStoreOrderOffline);
    }

    /**
     * 修改线下订单
     *
     * @param fsStoreOrderOffline 线下订单
     * @return 结果
     */
    @Override
    public int updateFsStoreOrderOffline(FsStoreOrderOffline fsStoreOrderOffline)
    {
        return fsStoreOrderOfflineMapper.updateFsStoreOrderOffline(fsStoreOrderOffline);
    }

    /**
     * 批量删除线下订单
     *
     * @param orderIds 需要删除的线下订单ID
     * @return 结果
     */
    @Override
    public int deleteFsStoreOrderOfflineByIds(Long[] orderIds)
    {
        return fsStoreOrderOfflineMapper.deleteFsStoreOrderOfflineByIds(orderIds);
    }

    /**
     * 删除线下订单信息
     *
     * @param orderId 线下订单ID
     * @return 结果
     */
    @Override
    public int deleteFsStoreOrderOfflineById(Long orderId)
    {
        return fsStoreOrderOfflineMapper.deleteFsStoreOrderOfflineById(orderId);
    }


    @Override
    public List<FsStoreOrderOfflineListVO> selectFsStoreOrderOfflineListVO(FsStoreOrderOfflineParam param) {
        List<FsStoreOrderOfflineListVO> list = fsStoreOrderOfflineMapper.selectFsStoreOrderOfflineListVO(param);
        for (FsStoreOrderOfflineListVO vo : list){
           vo.setMobile(ParseUtils.parsePhone(vo.getMobile()));
        }
        return list;
    }

    @Override
    public R createOrder(FsStoreOrderOfflineCreateParam param) {
        FsStoreOrderOffline order = new FsStoreOrderOffline();
        BeanUtils.copyProperties(param,order);
        order.setCreateTime(new Date());
        //生成分布式唯一值
        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
        order.setOrderCode(orderSn);
        order.setStatus(1L);
        Integer flag=fsStoreOrderOfflineMapper.insertFsStoreOrderOffline(order);
        if (flag==0) {
            return R.error("订单创建失败");
        }
        for (FsStoreProductAttrValueVO vo : param.getProducts()){
            FsStoreOrderOfflineItem item=new FsStoreOrderOfflineItem();
            item.setOrderId(order.getOrderId());
            item.setOrderCode(orderSn);
            item.setNum(vo.getCount());
            item.setProductId(vo.getProductId());
            item.setJsonInfo(JSONUtil.toJsonStr(vo));
            fsStoreOrderOfflineItemMapper.insertFsStoreOrderOfflineItem(item);
        }
        return R.ok("订单生成成功");
    }

    @Override
    public FsStoreOrderOfflineListVO selectFsStoreOrderOfflineVOById(Long orderId) {
        return fsStoreOrderOfflineMapper.selectFsStoreOrderOfflineVOById(orderId);
    }

    @Override
    public int uploadCredentials(FsStoreOrderOffline order) {
        order.setUploadTime(new Date());
        order.setStatus(2L);
        return fsStoreOrderOfflineMapper.updateFsStoreOrderOffline(order);
    }
}
