package cn.pluss.platform.merchantImage;

import cn.pluss.platform.entity.Account;
import cn.pluss.platform.entity.MerchantImage;
import cn.pluss.platform.exception.MsgException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author SSS
 */
public interface MerchantImageService extends IService<MerchantImage> {

    /**
     * 根据用户id获取进件图片信息, 包含结算信息等.
     * 鉴于某些原因，结算信息相关的图片不再实时保存到当前表中.
     * 此方法就是用于获取进件需要的所有图片信息
     *
     * @param userId 用户id
     * @return 进件图片资料
     */
    default List<MerchantImage> getListOfMerch(String userId) {
        return getListOfMerch(userId, Account.CHANNEL_TYPE_D1);
    }

    /**
     * 根据用户id获取进件图片信息, 包含结算信息等.
     * 鉴于某些原因，结算信息相关的图片不再实时保存到当前表中.
     * 此方法就是用于获取进件需要的所有图片信息
     *
     * @param userId      用户id
     * @param channelType 通道类型
     * @return 进件图片资料
     */
    List<MerchantImage> getListOfMerch(String userId, String channelType);

    /**
     * 保存图片并上传到服务商服务器
     *
     * @param merchantCode 商户code
     * @param url          图片链接
     * @param type         图片类型
     */
    void saveMerchantImageUpload(String merchantCode, String url, String type);

    /**
     * 根据实体类条件查询记录
     *
     * @param merchantImage 实体类条件
     * @return 记录
     */
    default MerchantImage queryMerchantImage(MerchantImage merchantImage) {
        return getBaseMapper().selectOne(new QueryWrapper<>(merchantImage));
    }

    /**
     * 根据实体类条件查询记录
     *
     * @param merchantImage 实体类条件
     * @return 记录
     */
    default List<MerchantImage> queryMerchantImageList(MerchantImage merchantImage) {
        return getBaseMapper().selectList(new QueryWrapper<>(merchantImage));
    }

    /**
     * 根据条件查询记录
     *
     * @param map 实体类条件
     * @return 记录
     */
    default List<MerchantImage> queryMerchantImagePage(Map<String, Object> map) {
        QueryWrapper<MerchantImage> qWrapper = new QueryWrapper<>();
        qWrapper.allEq(map);
        return getBaseMapper().selectList(qWrapper);
    }

    /**
     * 根据条件查询条数
     *
     * @param map 实体类条件
     * @return 记录
     */
    default Integer queryMerchantImagePageCount(Map<String, Object> map) {
        QueryWrapper<MerchantImage> qWrapper = new QueryWrapper<>();
        qWrapper.allEq(map);
        return getBaseMapper().selectCount(qWrapper);
    }

    /**
     * 保存多个实例
     *
     * @param merchantImageList 图片列表
     */
    default void saveMerchantImageBatch(List<MerchantImage> merchantImageList) {
        for (MerchantImage merchantImage : merchantImageList) {
            MsgException.checkBlank(merchantImage.getPhotoType(), "缺少图片类型");
            MsgException.checkBlank(merchantImage.getPicUrl(), "缺少图片链接");
        }

        for (MerchantImage merchantImage : merchantImageList) {
            String merchantCode = merchantImage.getMerchantCode();
            String type = merchantImage.getPhotoType();

            MerchantImage existImage = new MerchantImage();
            existImage.setMerchantCode(merchantCode);
            existImage.setPhotoType(type);

            existImage = getOne(new QueryWrapper<>(existImage));

            if (existImage != null) {
                merchantImage.setId(existImage.getId());
            }

            saveOrUpdate(merchantImage);
        }
    }
}

