package com.m2pool.lease.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.m2pool.lease.dto.*;
import com.m2pool.lease.dto.v2.PayWithdrawSellerRecordDto;
import com.m2pool.lease.dto.v2.ShopWalletInfoDto;
import com.m2pool.lease.entity.LeaseShop;
import com.m2pool.lease.vo.*;
import com.m2pool.lease.vo.v2.ShopWalletInfoVo;

import java.util.List;

/**
 * <p>
 * 店铺表 服务类
 * </p>
 *
 * @author yyb
 * @since 2025-08-05
 */
public interface LeaseShopService extends IService<LeaseShop> {


    /**
     * 新增店铺
     * @param shopVo
     * @return
     */
    Result<String> addShop(ShopVo shopVo);


    /**
     * 修改店铺
     * @param shopVo
     * @return
     */
    Result<String> updateShop( ShopVo shopVo);

    /**
     * 关闭店铺
     * @param baseVo
     * @return
     */
    Result<String> closeShop( BaseVo baseVo);


    /**
     * 根据用户邮箱查询店铺
     * @return
     */
    Result<ShopDto> getShopByUserEmail();

    /**
     * 根据店铺id查询店铺
     * @param baseVo
     * @return
     */
    Result<ShopDto> getShopById(BaseVo baseVo);


    /**
     * 删除店铺
     * @param baseVo
     * @return
     */
    Result<String> deleteShop(BaseVo baseVo);


    /**
     * 根据店铺id 获取店铺配置信息列表
     * @param baseVo
     * @return
     */
    Result<List<ShopConfigDto>> getShopConfig(BaseVo baseVo);

    /**
     * 根据 店铺id 获取店铺商品列表
     * @param baseVo
     * @return
     */
    Result<List<ShopNameDto>> getProductListById(BaseVo baseVo);

    /**
     * 新增商铺配置
     * @param shopConfigVo
     * @return
     */
    Result<String> addShopConfig( ShopConfigVo shopConfigVo);


    /**
     * 修改商铺配置
     * @param shopConfigVo
     * @return
     */
    Result<String> updateShopConfig( ShopConfigVo shopConfigVo);

    /**
     * 删除商铺配置
     * @param baseVo
     * @return
     */
    Result<String> deleteShopConfig(BaseVo baseVo);

    /**
     * 获取链和链列表
     * @return
     */
    Result<List<ChainListDto>> getChainAndList();


    Result<List<ChainListDto>> getChainAndListForSeller( BaseVo baseVo);


    Result<ChainListDto> getChainAndCoin(BaseVo baseVo);


    /**
     * 根据店铺id 获取店铺配置信息列表--v2 新增手续费和钱包余额
     * @param baseVo
     * @return
     */
    Result<List<ShopWalletInfoDto>> getShopConfigV2(BaseVo baseVo);


    /**
     * 卖家余额提现
     * @param balanceVo
     * @return
     */
    Result<String> withdrawBalanceForSeller(BalanceVo  balanceVo);


    /**
     * 修改商铺配置--v2 新增手续费和钱包余额
     */
    Result<String> updateShopConfigV2(ShopWalletInfoVo shopWalletInfoVo);



    /**
     * 获取店铺内所有钱包（包含历史钱包）提现列表
     * @return
     */
    PageResult<PayWithdrawSellerRecordDto> balanceWithdrawList(PageVo pageVo);
}
