package shop.alien.store.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.result.R;
import shop.alien.entity.store.StoreIncomeDetailsRecord;
import shop.alien.entity.store.vo.StoreIncomeDetailsRecordVo;

import java.util.Map;

/**
 * 商户收入明细表 服务类
 *
 * @author ssk
 * @since 2025-02-25
 */
public interface StoreIncomeDetailsRecordService extends IService<StoreIncomeDetailsRecord> {

    /**
     * 提现
     *
     * @param storeId     门店id
     * @param payPassword 支付密码
     * @param money 提现金额
     * @return 是否成功
     */
    R cashOut(Integer storeId, String payPassword, Integer money);

    /**
     * 提现
     *
     * @param storeId     门店id
     * @return 是否成功
     */
    /**
     * 提现申请
     *
     * @param storeId     门店id
     * @param payPassword 支付密码
     * @param withdrawalMoney 提现金额
     * @return 是否成功
     */
    R applyCashOut(Integer storeId, String payPassword, Integer withdrawalMoney);

    /**
     * 提现审批
     *
     * @param cashOutId     提现申请记录ID
     * @param approveStatus 审批状态
     */
    String approveCashOut(Integer cashOutId, String approveStatus, String failReason);

    /**
     * 今日收益
     *
     * @param storeId 门店id
     * @return 收益
     */
    String todayIncome(Integer storeId);

    /**
     * 账期
     *
     * @param storeId     门店id
     * @param incomeType  收入类型, 0:主页, 1:优惠券, 2:代金券, 3:套餐, 4:联名卡
     * @param paymentType 账期类型,0:未到,1:已到
     * @return 未到账期
     */
    JSONObject noYetPayment(Integer storeId, Integer incomeType, Integer paymentType, String startTime, String endTime, int page, int size);

    /**
     * 账户余额
     *
     * @param storeId 门店id
     * @return 账户余额
     */
    Map<String, Object> accountBalance(Integer storeId);

    /**
     * 团购收益
     *
     * @param storeId    门店id
     * @param date       日期
     * @param incomeType 收入类型, 0:主页, 1:优惠券, 2:代金券, 3:套餐, 4:联名卡
     * @return 团购收益
     */
    StoreIncomeDetailsRecordVo groupIncome(Integer storeId, String date, Integer incomeType, Integer page, Integer size);

    /**
     * 今日订单数
     *
     * @param storeId 门店id
     * @return 今日订单数
     */
    Integer todayOrderCount(Integer storeId);
}
