package com.ruoyi.ss.store.service;

import com.ruoyi.ss.store.domain.Store;
import com.ruoyi.ss.store.domain.StoreBO;
import com.ruoyi.ss.store.domain.StoreQuery;
import com.ruoyi.ss.store.domain.StoreVo;

import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
 * 商户Service接口
 *
 * @author 邱贞招
 * @date 2024-02-21
 */
public interface StoreService
{
    /**
     * 查询商户
     *
     * @param storeId 商户主键
     * @return 商户
     */
    public StoreVo selectSmStoreById(Long storeId);

    /**
     * 查询商户列表
     *
     * @param store 商户
     * @return 商户集合
     */
    public List<StoreVo> selectSmStoreList(StoreQuery store);

    /**
     * 新增商户
     *
     * @param store 商户
     * @return 结果
     */
    public int insertSmStore(Store store);

    /**
     * 修改商户
     *
     * @param store 商户
     * @return 结果
     */
    public int updateSmStore(Store store);

    /**
     * 调整商户位置
     * @param list 调整后的商户列表
     */
    boolean changeSort(List<Store> list);

    /**
     * 查询商户下的设备及其设备数量
     * @param query 查询条件
     * @return 设备列表
     */
    List<StoreVo> listCount(StoreQuery query);

    /**
     * 查询用户的默认商户
     * @param userId
     */
    StoreVo selectDefaultStore(Long userId);

    /**
     * ids逻辑删除
     * @param ids id列表
     */
    int logicDel(List<Long> ids);

    /**
     * 查询附近的店铺
     * @param query
     * @return
     */
    List<StoreVo> listNearBy(StoreQuery query);

    /**
     * ids查询查询列表
     * @param storeIds
     * @return
     */
    List<StoreVo> selectStoreByIds(List<Long> storeIds);

    /**
     * 查询数量
     * @param query 查询条件
     */
    int selectCount(StoreQuery query);

    /**
     * 查询用户ID列表
     * @param userIds
     * @return
     */
    Map<Long, Integer> selectCountMapByUserIds(List<Long> userIds);

    /**
     * 设为默认店铺
     * @param userId
     * @param storeId
     * @return
     */
    boolean setDefault(Long userId, Long storeId);

    /**
     * 查询店铺映射表
     */
    <K> Map<K, StoreVo> selectMap(StoreQuery query, Function<? super StoreVo, ? extends K> keyMapper);

    /**
     * ids查询列表
     */
    default List<StoreVo> selectSmStoreListByIds(List<Long> ids) {
        return selectSmStoreListByIds(ids, null);
    }

    /**
     * ids查询列表
     */
    List<StoreVo> selectSmStoreListByIds(List<Long> ids, Long userId);

    /**
     * 用户ID查询店铺列表
     */
    List<StoreVo> selectByUserId(Long userId);

    /**
     * 新建店铺并进行审核
     */
    int insertAndApply(StoreBO store);

    /**
     * 店铺修改审核
     */
    int updateApply(StoreBO data);

    /**
     * 条件更新
     */
    int updateByQuery(Store data, StoreQuery query);

    /**
     * 查询员工管理的列表
     */
    List<StoreVo> selectStaffStoreList(StoreQuery query);

    /**
     * 查询一个员工管理的店铺
     */
    StoreVo selectStaffStoreOne(StoreQuery query);
}
