package com.ruoyi.ss.storeApply.service.impl;

import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.ServiceUtil;
import com.ruoyi.ss.store.domain.StoreBO;
import com.ruoyi.ss.store.domain.StoreVo;
import com.ruoyi.ss.store.service.StoreService;
import com.ruoyi.ss.storeApply.domain.StoreApply;
import com.ruoyi.ss.storeApply.domain.StoreApplyVO;
import com.ruoyi.ss.storeApply.domain.bo.StoreApplyApprovalBO;
import com.ruoyi.ss.storeApply.domain.dto.StoreApplyApprovalDTO;
import com.ruoyi.ss.storeApply.domain.enums.StoreApplyStatus;
import com.ruoyi.ss.storeApply.domain.enums.StoreApplyType;
import com.ruoyi.ss.storeApply.service.StoreApplyConverter;
import com.ruoyi.ss.storeApply.service.StoreApplyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author wjh
 * 2024/8/3
 */
@Service
public class StoreApplyConverterImpl implements StoreApplyConverter {

    @Autowired
    private StoreService storeService;

    @Autowired
    private StoreApplyService storeApplyService;

    /**
     * 创建变更申请
     *
     * @param data
     * @param userId
     * @param type
     */
    @Override
    public StoreApply toPo(StoreBO data, Long userId, StoreApplyType type) {
        if (data == null) {
            return null;
        }

        StoreApply po = new StoreApply();
        po.setApplyType(type.getType());
        po.setStatus(StoreApplyStatus.WAIT_AUDIT.getStatus());
        po.setStoreId(data.getStoreId());
        po.setUserId(userId);
        po.setNewData(data);

        // 修改时，将旧的店铺数据保存
        if (StoreApplyType.UPDATE.equals(type) ) {
            StoreVo old = storeService.selectSmStoreById(data.getStoreId());
            ServiceUtil.assertion(old == null, "待修改的店铺不存在");
            po.setOldData(old);
        }

        return po;
    }

    /**
     * 审核DTO 转为 BO
     *
     * @param dto
     */
    @Override
    public StoreApplyApprovalBO toBO(StoreApplyApprovalDTO dto) {
        if (dto == null) {
            return null;
        }
        StoreApplyVO apply = storeApplyService.selectStoreApplyById(dto.getId());
        ServiceUtil.assertion(apply == null, "申请不存在");

        StoreVo store = storeService.selectSmStoreById(apply.getStoreId());

        StoreApplyApprovalBO bo = new StoreApplyApprovalBO();
        bo.setApply(apply);
        bo.setDto(dto);
        bo.setVerifyUser(SecurityUtils.getLoginUser().getUser());
        bo.setStore(store);
        return bo;
    }
}
