package com.sonic.lion.service;

import com.sonic.lion.domain.output.EnabledPayChannelOutput;
import com.sonic.lion.enums.PayChannel;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 支付配置
 */
public interface PayConfigService {

    /**
     * 通过key查询配置value
     *
     * @param key
     * @return
     */
    String getByKey(String key);

    /**
     * Google 支付费用比例 例如:1/3
     *
     * @return
     */
    String getGoogleFeeRatio();

    /**
     * 安卓 支付费用比例 例如:2/3
     *
     * @return
     */
    String getIOSFeeRatio();

    /**
     * 获取所有开启的支付渠道
     *
     * @return
     */
    List<String> getEnabledPayChannel();

    /**
     * 获取所有支付渠道
     *
     * @return
     */
    List<String> getAllPayChannelDebug();

    /**
     * 获取所有开启的提现渠道
     *
     * @return
     */
    List<String> getEnabledPayOutChannel();

    /**
     * 充值渠道开关状态校验
     * @param currentUserId
     * @param payChannel
     * @return
     */
    boolean paymentChannelSwitchCheckPass(Long currentUserId, PayChannel payChannel);

    /**
     * 提现渠道开关状态校验
     * @param currentUserId
     * @param payChannel
     * @return
     */
    boolean payoutChannelSwitchCheckPass(Long currentUserId, PayChannel payChannel);

    /**
     * 获取测试人员配置
     * @return
     */
    List<String> getDebugPayUserIds();

    /**
     * 查询是否允许 首单 奖励
     *
     * @return
     */
    boolean enableFirstOrderReward();


    /**
     * 查询是否允许 周五限时奖励
     *
     * @return
     */
    boolean enableEveryFridayReward();

    /**
     * 是否开启提现手续费减免
     *
     * @return
     */
    boolean enableWithdrawFeeReduction();

    /**
     * 提现手续费减免结束时间
     *
     * @return
     */
    LocalDateTime withdrawFeeReductionEndTime();

    /**
     * 可用的支付渠道
     * @param userId
     * @return
     */
    EnabledPayChannelOutput enabledPayChannel(Long userId);

}
