package shop.alien.storeplatform.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartRequest;
import shop.alien.entity.result.R;
import shop.alien.entity.store.StoreBusinessInfo;
import shop.alien.entity.store.StoreImg;
import shop.alien.entity.store.StoreInfo;
import shop.alien.entity.store.StoreInfoDraft;
import shop.alien.entity.store.dto.StoreInfoDto;
import shop.alien.entity.store.vo.*;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 二期-门店信息 服务类
 *
 * @author ssk
 * @since 2024-12-05
 */
public interface StoreBusinessService extends IService<StoreInfo> {

    /**
     * 门店详情
     *
     * @param id 门店id
     * @return StoreMainInfoVo
     */
    StoreMainInfoVo getDetail(Integer id);

    /**
     * 门店装修详情
     * @param id 门店id
     * @param id 门店id
     */
    StoreMainInfoVo getDecorationDetail(Integer id);

    /**
     *
     */
    List<StoreBusinessInfo>  getStoreInfoBusinessHours(Integer id);

    /**
     * 门店信息-修改后展示
     *
     * @param id 门店id
     * @return StoreMainInfoVo
     */
    StoreMainInfoVo getStoreInfo(Integer id);

    /**
     * web-分页查询店铺信息
     *
     * @param page         页码
     * @param size         页容
     * @param storeName    门店名称
     * @param storeContact 联系人
     * @param storePhone   门店电话
     * @param storeType    门店类型
     * @return IPage<StoreInfoVo>
     */
    IPage<StoreInfoVo> getStorePage(int page, int size, String storeName, String storeContact, String id, String storePhone, String storeType, String expiredState, String storeApplicationStatus, String storeStatus, String businessSection, String jingdu, String weidu, String renewContractStatus, String foodLicenceStatus, String foodLicenceWhetherExpiredStatus);

    /**
     * web-重置门店密码
     *
     * @param storeId 门店id
     * @return boolean
     */
    boolean resetPassword(String storeId);

    /**
     * web-修改门店状态
     *
     * @param storeId        门店id
     * @param businessStatus 营业状态
     * @return boolean
     */
    boolean setStoreState(String storeId, Integer businessStatus);

    /**
     * web-新增店铺
     *
     * @param multipartRequest 文件请求
     * @param store            店铺信息
     * @return boolean
     */
    boolean saveStore(MultipartRequest multipartRequest, StoreInfo store);

    /**
     * 导出Excel
     *
     * @return ResponseEntity
     */
    ResponseEntity<byte[]> exportToExcel();

    /**
     * web端新增门店及门店用户
     *
     * @return ResponseEntity
     */
    StoreInfoVo saveStoreInfo(StoreInfoDto storeInfoDto) throws Exception;

    /**
     * 新增店铺草稿
     *
     * @param storeInfoDraft
     * @return
     */
    int saveStoreInfoDraft(StoreInfoDraft storeInfoDraft);

    /**
     * 查询草稿信息
     *
     * @param storeUserId
     * @return
     */
    StoreInfoDraft selectDraftByUserId(int storeUserId);

    /**
     * web端修改门店及门店用户
     *
     * @return ResponseEntity
     */
    StoreInfoVo editStoreInfo(StoreInfoDto storeInfoDto);

    /**
     * web端删除门店及门店用户
     *
     * @return ResponseEntity
     */
    String deleteStoreInfo(StoreInfoDto storeInfoDto);

    /**
     * web端删除门店及门店用户
     *
     * @return ResponseEntity
     */
    void restPassword(StoreInfoDto storeInfoDto);

    /**
     * web端查询经营板块信息
     */
    List<StoreDictionaryVo> getBusinessSection();

    /**
     * web端查询经营板块的经营种类信息
     */
    List<StoreDictionaryVo> getBusinessSectionTypes(String parentId);

    /**
     * web端查询未绑定的账号信息
     */
    List<StoreUserVo> getUnboundAccountList(String id);

    /**
     * web端新增经营板块及经营类型
     */
    void addBusinessSectionAndTypes(StoreInfoDto storeInfoDto);

    /**
     * web端查询门店明细
     */
    StoreInfoVo getStoreDetail(String storeId, String userId, String jingdu, String weidu);

    /**
     * web端审批结果
     */
    void approveStoreInfo(String storeId, Integer approvalStatus, String reason);

    /**
     * web端导出商铺信息结果
     */
    String exportExcel(String id, String storePhone, String businessSection, String storeApplicationStatus) throws IOException;

    /**
     * web端导出商铺到期时间信息
     */
    String exportExcelExpirationTime(String id, String expiredState) throws IOException;

    /**
     * 八大类用户端筛选
     */
    IPage<StoreInfo> getScreening(ScreeningOfEightMajorCategoriesVO screeningOfEightMajorCategoriesVO);
    IPage<StoreInfoVo> getScreeningNew(ScreeningOfEightMajorCategoriesVO screeningOfEightMajorCategoriesVO);

    List<StoreInfo> getBusinessTypesName(String businessTypesNames);

    /**
     * 注销店铺
     *
     * @param storeInfo 店铺Vo
     * @return boolean
     */
    void logoutStore(StoreInfoVo storeInfo);

    /**
     * 取消注销店铺
     *
     * @param storeInfo 店铺Vo
     * @return boolean
     */
    void cancelLogoutStore(StoreInfoVo storeInfo);

    /**
     * web-查询店铺信息根据门店电话
     *
     * @param storeTel 门店电话
     * @return List<StoreInfo>
     */
    List<StoreInfo> getStoreInfoByStoreTel(String storeTel);

    /**
     * 修改店铺佣金比率
     *
     * @param storeInfoDto
     * @return
     */
    int editStoreCommissionRate(StoreInfoDto storeInfoDto);

    /**
     * 门店装修 - 编辑
     * @param storeInfo
     * @return
     */
    int saveOrUpdateStoreInfo(StoreInfoDto storeInfo);

    /**
     * 商家注销店铺效验
     */
    Map<String,String> storeInfoVerification(int id);

    /**
     * 手动删除店铺
     * @param id
     */
    void deleteManualStoreInfo(int id);

    /**
     * 店铺续签合同
     *
     */
    int uploadRenewalContract(List<StoreImg> storeImgList);

    /**
     * 店铺食品经营许可证
     * @param storeImg
     * @return
     */
    int uploadfoodLicence(StoreImg storeImg);

    /**
     * 获取店铺续签合同状态以及店铺状态为审核中合同图片list
     *
     */
    Map<String,Object> getStoreContractStatus(int id);

    /**
     * 获取店铺食品经营许可证状态以及店铺状态为审核中合同图片list
     * @param id
     * @return
     */
    Map<String,Object> getStoreFoodLicenceStatus(int id);

    int updateStoreImgModeInfo(StoreImgInfoVo storeImgInfoVo);


    /**
     * 审核通过续签合同转为正常合同删除之前合同
     *
     */
    int conversionContract(int id);

    /**
     * 经营许可证审核通过后 图片类型变为审核通过后 img_type25
     *
     */
    int foodLicenceType(int id);

    boolean updateUserStatus(String phone, String type);

    R<IPage<StoreUserVo>> getStoreUserList(int pageNum, int pageSize, String id, String phone, Integer status);
}
