package com.zanxiang.game.module.manage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zanxiang.game.module.manage.pojo.dto.PayApplicationDTO;
import com.zanxiang.game.module.manage.pojo.params.PayApplicationAddUpdateParam;
import com.zanxiang.game.module.manage.pojo.params.PayApplicationListParam;
import com.zanxiang.game.module.manage.pojo.vo.PayApplicationChoiceVO;
import com.zanxiang.game.module.manage.pojo.vo.PayApplicationVO;
import com.zanxiang.game.module.mybatis.entity.PayApplication;

import java.util.List;
import java.util.Map;

/**
 * @author : lingfeng
 * @time : 2022-06-23
 * @description : 游戏应用
 */
public interface IPayApplicationService extends IService<PayApplication> {

    /**
     * 支付应用程序地图
     *
     * @return {@link Map}<{@link Long}, {@link PayApplicationDTO}>
     */
    Map<String, PayApplicationDTO> payApplicationMap();

    /**
     * 支付应用情况
     *
     * @param payApplicationType    : 支付应用程序类型
     * @param payApplicationAppId   : 支付应用程序id
     * @param payApplicationCompany : 支付应用公司
     * @return {@link Map}<{@link Long}, {@link PayApplicationDTO}>
     */
    Map<String, PayApplicationDTO> payApplicationCondition(Integer payApplicationType, String payApplicationAppId, String payApplicationCompany);

    /**
     * 支付应用选择列表
     *
     * @return {@link List}<{@link PayApplicationChoiceVO}>
     */
    List<PayApplicationChoiceVO> payApplicationChoiceList();

    /**
     * 支付应用添加或者更新
     *
     * @param param : 参数
     * @return {@link Boolean}
     */
    Boolean addOrUpdate(PayApplicationAddUpdateParam param);

    /**
     * 根据主键更新状态
     *
     * @param id     : 主键id
     * @param status : 状态
     * @return {@link Boolean}
     */
    Boolean statusUpdate(Long id, Integer status);

    /**
     * 列表
     *
     * @param bo : 参数
     * @return {@link IPage}<{@link PayApplicationVO}>
     */
    IPage<PayApplicationVO> pageList(PayApplicationListParam bo);

    /**
     * 获取游戏应用二维码图片地址
     *
     * @param id : 应用id
     * @return {@link String}
     */
    String getQrCode(Long id);

    /**
     * 删除通过id
     *
     * @param id : 要删除的信息id
     * @return boolean
     */
    boolean deleteById(Long id);

    /**
     * 通过应用程序id
     *
     * @param appId 应用程序id
     * @return {@link PayApplicationDTO}
     */
    PayApplicationDTO getByAppId(String appId);

    /**
     * 根据支付盒子id获取支付用用
     *
     * @param payBoxId : 支付盒子id
     * @return : 返回支付应用
     */
    PayApplicationDTO getPayApplicationByPayBoxId(Long payBoxId);
}
