package com.ruoyi.ss.store.service;

import java.util.List;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.ss.store.domain.*;

/**
 * 店铺Service接口
 *
 * @author qzz
 * @date 2024-11-20
 */
public interface IStoreService
{
    /**
     * 查询店铺
     *
     * @param storeId 店铺主键
     * @return 店铺
     */
    public StoreVO selectEStoreByStoreId(Long storeId);

    /**
     * 查询店铺
     *
     * @param storeId 店铺主键
     * @return 店铺
     */
    public StoreVO selectMchStoreByStoreId(Long storeId);

    /**
     * 查询店铺列表
     *
     * @param eStore 店铺
     * @return 店铺集合
     */
    public List<StoreVO> selectEStoreList(StoreQuery eStore);

    /**
     * 新增店铺
     *
     * @param eStore 店铺
     * @return 结果
     */
    public int insertEStore(Store eStore);

    /**
     * 修改店铺
     *
     * @param eStore 店铺
     * @return 结果
     */
    public int updateEStore(Store eStore);

    /**
     * 批量删除店铺
     *
     * @param storeIds 需要删除的店铺主键集合
     * @return 结果
     */
    public int deleteEStoreByStoreIds(Long[] storeIds);

    /**
     * 删除店铺信息
     *
     * @param storeId 店铺主键
     * @return 结果
     */
    public int deleteEStoreByStoreId(Long storeId);


    /**
     * 根据定位获取附近店铺列表
     */
    List<StoreVO> getStoreListByLocation(StoreQuery query);

    /**
     * 根据城市id获取店铺列表
     */
    List<StoreVO> getStoreListByCityId(Long cityId);

    /**
     * 开大门
     * returnMac  是否需要返回mac
     */
    boolean openGate(Long storeId,String reason,boolean returnMac);

    /**
     * 关大门
     */
    boolean closeGate(Long storeId,String reason);

    /**
     * 客服电话
     */
    ServerPhone getServicePhone(Long storeId);

    /**
     * 获取可用店铺列表
     */
    List<StoreVO> getAvailableStores(Long storeId);

    /**
     * 绑定大门
     */
    int bandGate(StoreDTO dto);

    /**
     * 更新门店类型标签
     */
    int updateStoreTypeTags(Long storeId, String type);

    /**
     * 大门权限配置
     */
    int gateAuth(GateAuthDTO dto);

    /**
     * 下架设备（根据设备id）
     * @param deviceId 设备id
     * @return String
     */
    int offlineDeviceByDeviceId(Long deviceId);

    /**
     * 获取用户已创建店铺数量
     * @param userId 用户id
     * @return int
     */
    int selectCount(Long userId);

    /**
     * 根据商户id获取店铺id
     * @param mchId 商户id
     * @return Long
     */
    Long selectStoreIdByMerchantId(Long mchId);

    /**
     * code交换id
     */
    Long getId(String storeCode);
}
