package shop.alien.storeplatform.service;

import com.alibaba.fastjson2.JSONObject;
import shop.alien.entity.result.R;
import shop.alien.entity.store.StoreCashOutRecord;

import java.util.Map;

/**
 * web端商户收入管理服务接口
 *
 * @author ssk
 * @since 2025-11-14
 */
public interface IncomeManageService {

    /**
     * 账期查询
     *
     * @param storeId     门店ID
     * @param incomeType  收入类型, 0:主页, 1:优惠券, 2:代金券, 3:套餐, 4:联名卡
     * @param paymentType 账期类型, 0:未到, 1:已到
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param page        页码
     * @param size        每页条数
     * @return 账期数据
     */
    JSONObject getPaymentCycle(Integer storeId, Integer incomeType, Integer paymentType,
                               String startTime, String endTime, int page, int size);

    /**
     * 查询账户余额
     *
     * @param storeId 门店ID
     * @return 账户余额信息（balance: 总余额, cashOutMoney: 可提现金额）
     */
    Map<String, Object> getAccountBalance(Integer storeId);

    /**
     * 提现申请
     *
     * @param storeId         门店ID
     * @param payPassword     支付密码
     * @param withdrawalMoney 提现金额（单位：分）
     * @return 提现结果
     */
    R<?> cashOut(Integer storeId, String payPassword, Integer withdrawalMoney);

    /**
     * 提现记录查询
     *
     * @param storeId          门店ID
     * @param cashOutStartTime 开始时间（格式：yyyy-MM-dd）
     * @param cashOutEndTime   结束时间（格式：yyyy-MM-dd）
     * @param paymentStatus    提现状态
     * @param page             页码
     * @param size             每页条数
     * @return 提现记录列表
     */
    Object getCashOutRecordList(Integer storeId, String cashOutStartTime, String cashOutEndTime,
                                String paymentStatus, Integer page, Integer size);

    /**
     * 提现记录详情查询
     *
     * @param id 提现记录ID
     * @return 提现记录详情
     */
    StoreCashOutRecord getCashOutRecordDetail(Integer id);

    /**
     * 今日收益查询
     * <p>
     * 接口迁移来源: App端 /alienStore/storeIncomeDetailsRecord/groupIncome?date=2025-11-11&storeId=103&incomeType=0&page=1&size=10
     * </p>
     *
     * @param storeId    门店ID
     * @param date       日期（格式：yyyy-MM-dd）
     * @param incomeType 收入类型, 0:主页, 1:优惠券, 2:代金券, 3:套餐, 4:联名卡
     * @param page       页码
     * @param size       每页条数
     * @return 今日收益信息
     */
    Object getGroupIncome(Integer storeId, String date, Integer incomeType, Integer page, Integer size);

    /**
     * 快速提现申请（免审核，直接通过）
     *
     * @param storeId         门店ID
     * @param payPassword     支付密码
     * @param withdrawalMoney 提现金额（单位：分）
     * @return 提现结果
     */
    R<?> applyFastCashOut(Integer storeId, String payPassword, Integer withdrawalMoney);

    /**
     * 已入账/未入账详情查询
     *
     * @param storeId     门店ID
     * @param incomeType  收入类型, 0:主页, 1:优惠券, 2:代金券, 3:套餐, 4:联名卡
     * @param paymentType 账期类型,0:未入账,1:已入账
     * @param startTime   开始时间（格式：yyyy-MM-dd）
     * @param endTime     结束时间（格式：yyyy-MM-dd）
     * @param page        页数
     * @param size        条数
     * @return 入账详情
     */
    JSONObject getPaymentDetails(Integer storeId, Integer incomeType, Integer paymentType, 
                                 String startTime, String endTime, int page, int size);

    /**
     * 收入汇总统计
     * 包含：可提现金额、今日收益、已入账总数、未入账总数
     *
     * @param storeId 门店ID
     * @return 收入汇总统计数据
     */
    Map<String, Object> getIncomeSummary(Integer storeId);
}


