package cn.hanghui.outapi.platform.tenant.service;


import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayAppAuthCancelledMqRequest;
import cn.hanghui.outapi.platform.common.entity.po.Account;
import cn.hanghui.outapi.platform.common.entity.rest.RestResult;
import cn.hanghui.outapi.platform.tenant.entity.dto.DeviceDto;
import cn.hanghui.outapi.platform.tenant.entity.dto.DeviceOpConfigDto;
import cn.hanghui.outapi.platform.tenant.entity.dto.DeviceVo;
import cn.hanghui.outapi.platform.tenant.entity.dto.TenantDto;
import cn.hanghui.outapi.platform.tenant.entity.dto.TenantReqDto;
import cn.hanghui.outapi.platform.tenant.entity.dto.TenantVo;
import cn.hanghui.outapi.platform.tenant.entity.dto.ampe.AmpeDeviceDto;
import cn.hanghui.outapi.platform.tenant.entity.dto.ampe.HhFaceDeviceDto;
import cn.hanghui.outapi.platform.tenant.entity.dto.ampe.HhFaceDeviceSearch;
import cn.hanghui.outapi.platform.tenant.entity.enums.AuthModuleTypeEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;


public interface TenantService {

    /**
     * 获取商户列表
     *
     * @return
     */
    RestResult list(TenantDto dto);

    /**
     * 添加商户
     *
     * @param dto
     * @return
     */
    RestResult<Boolean> add(TenantReqDto dto);

    /**
     * 删除商户
     *
     * @param id
     * @return
     */
    RestResult<Boolean> del(Long id);

    /**
     * 查询商户列表分页
     *
     * @param dto
     * @return
     */
    RestResult<IPage<TenantVo>> page(TenantReqDto dto);

    /**
     * 添加或删除授权设备
     *
     * @param dto
     * @return
     */
    RestResult<Boolean> opDevice(DeviceDto dto);

    /**
     * 查询设备列表分页
     *
     * @param dto
     * @return
     */
    RestResult<IPage<DeviceVo>> snPage(DeviceDto dto);

    /**
     * 内部服务调用 获取商户列表
     *
     * @return
     */
    RestResult innerList();

    /**
     * 添加设备
     *
     * @param dto
     * @return
     */
    RestResult<Boolean> addDevice(DeviceDto dto);

    /**
     * 授权或取消授权
     *
     * @param deviceId
     * @param auth
     * @return
     */
    RestResult<Boolean> opeDeviceAuth(Long deviceId, Boolean auth);

    /**
     * 删除设备
     *
     * @param deviceId
     * @return
     */
    RestResult<Boolean> deviceDel(Long deviceId);


    /**
     * 根据设备sn获取三方授权商户信息
     *
     * @param sn
     * @return
     */
    TenantVo getThirdAppAuthTokenBySn(String sn);

    /**
     * 获取appId信息
     *
     * @param sn
     * @return
     */
    TenantVo getBySn(String sn);


    /**
     * 根据appId更新accessToken
     *
     * @param appId
     * @param accessToken
     */
    void updateAppAccessTokenByAppId(String appId, String accessToken);

    /**
     * 第三方应用授权
     *
     * @param request
     */
    void appAuthCancelled(AlipayAppAuthCancelledMqRequest request);

    /**
     * 操作三方授权
     *
     * @param id
     * @param flag
     * @return
     */
    RestResult<Boolean> opeAuth(Long id, Boolean flag);

    /**
     * 设备操作配置信息
     *
     * @param dto
     * @return
     */
    RestResult<Boolean> deviceOpConfig(DeviceOpConfigDto dto);

    /**
     * 获取设备列表
     *
     * @return
     */
    RestResult<List<String>> snlist();

    /**
     * 获取商户列表
     *
     * @param account
     * @return
     */
    RestResult<List<TenantVo>> innerList(Account account);

    /**
     * 获取授权账号商户列表
     *
     * @param account
     * @return
     */
    RestResult<List<TenantVo>> getAuthTenantList(Account account, AuthModuleTypeEnum authModuleTypeEnum);

    RestResult<IPage<DeviceVo>> page(HhFaceDeviceSearch dto, Account account);

    RestResult<Boolean> update(HhFaceDeviceDto dto, Account account);
}
