package com.cool.store.service.wallet;

import com.cool.store.dto.wallet.*;
import com.cool.store.request.wallet.*;
import com.cool.store.vo.wallet.*;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * <p>
 * 钱包 服务类
 * </p>
 *
 * @author wangff
 * @since 2025/11/13
 */
public interface WalletService {

    /**
     * 平安银行钱包账号创建
     * @param request 平安钱包账户创建Request
     * @return 是否成功
     */
    Boolean accountCreate(AccountCreateRequest request);

    /**
     * 鉴权申请
     * @param request 门店id
     * @return 是否成功
     */
    AccountAuthenticationVO authentication(WalletShopRequest request);

    /**
     * 账号开通
     * @param request 平安钱包账户开通Request
     * @return 是否成功
     */
    Boolean openAccount(AccountOpenRequest request);

    /**
     * 银行支行列表查询
     * @param request 支行信息查询Request
     * @return 银行支行信息列表
     */
    PageInfo<BankVO> getBankList(BankListRequest request);

    /**
     * 判断营业执照是否已经上传，已上传则调用打标接口
     * @param shopId 门店shopId
     * @param storeId 主数据门店id
     * @param lineId 线索id
     */
    void addTagIfUploadLicense(Long shopId, String storeId, Long lineId);

    /**
     * 打标成功回调通知
     * @param request
     * @return
     */
    Boolean addTagCallback(AddTagCallbackNoticeRequest request);

    /**
     * 大额充值 回调接口
     * @param request
     * @return
     */
    Boolean largePaymentCallback(PaymentDTO request);

    /**
     * 网商银行 回调接口
     * @param request
     * @return
     */
    Boolean onlineCommercialBankCallback(OnlineCommercialBankCallbackRequest request);

    /**
     * 账户交易回调
     * @param request
     * @return
     */
    Boolean accountTradeCallback(AccountTradeCallbackRequest request);

    /**
     * 查询账户列表
     * @param request 账户查询Request
     * @return 账户信息VO列表
     */
    AccountDataVO getAccountList(AccountQueryRequest request);

    /**
     * 根据账户编号查询账户信息
     * @param request 账户查询Request
     * @return 账户信息VO
     */
    AccountInfoVO getAccountInfo(AccountQueryRequest request);

    /**
     * 交易流水
     * @param request 交易流水查询Request
     * @return 账户交易列表VO列表
     */
    AccountBillPageVO getBillPage(AccountBillQueryRequest request);

    /**
     * 账户交易详情
     * @param request 交易详情查询Request
     * @return 交易详情VO
     */
    TradeRecordDTO getBillDetail(BillDetailRequest request);

    /**
     * 密码维护
     * @param request 账户密码维护Request
     * @return 是否成功
     */
    Boolean passwordUpdate(AccountPasswordRequest request);

    /**
     * 门店是否存在密码
     * @param request
     * @return
     */
    PasswordDTO existPassword(OutStoreIdRequest request);

    /**
     * 账户充值
     * @param request 账户充值Request
     * @return 账户充值VO
     */
    AccountPaymentVO payment(AccountPaymentRequest request);

    /**
     * 未完成充值订单查询
     * @param request 查询request
     * @return 钱包支付订单VO列表
     */
    PageInfo<WalletPaymentOrderVO> nonPaymentOrderPage(LargePaymentQueryRequest request);

    /**
     * 根据预支付id查询收款账户详情
     * @param paymentId 预支付id
     * @return 账户充值VO
     */
    AccountPaymentVO paymentDetail(String paymentId);

    /**
     * 提现
     * @param request 钱包提现Request
     * @return 是否成功
     */
    WithDrawerDTO withDrawer(WalletWithDrawerRequest request);

    /**
     * 批量查询账户信息 分页查询  所有门店账户
     * @param request 批量查询账户信息Request
     * @return 账户信息VO列表
     */
    PageInfo<AccountPageVO> getAllAccountList(CoolAccountBatchQueryRequest request);

    /**
     * 批量查询账户交易流水
     * @param request
     * @return
     */
    PageInfo<TradeRecordDTO> getTradeRecordList(CoolTradeRecodePageRequest request,Boolean orgFlag);


    /**
     * 查询充值的数据
     * @param request
     * @return
     */
    PageInfo<TradeRecordDTO> getRechargeTradeRecordList(CoolTradeRecodeRequest request);

    /**
     * 通过门店Code 查询存量客户开通基本信息
     * @param storeCode
     * @return
     */
    OpenBasicInfoDTO getOpenBasicInfo(String storeId, String storeCode);

    /**
     * 开通网商银行
     * @param request
     * @return
     */
    Boolean openOnlineBankAccount(CoolOpenBasicInfoRequest request);

    /**
     * 新店开通网商银行
     */
    Boolean newStoreOpenOnlineBankAccount(NewWsCreateAccountRequest request);

    /**
     * 网商发送激活短信
     * @param request 门店idRequest
     * @return 是否成功
     */
    Boolean onlineBankActive(StoreShopRequest request);

    /**
     * 网商银行查询银行名称
     * @return
     */
    List<BankInfoDTO> findBankHeadName();

    /**
     * 网商充值账户查询
     */
    WsPayAccountDTO wsPayAccountQuery(StoreShopRequest request);

    PageInfo<AccountInfoDTO> getOrgAccountInfoList(CoolAccountPageRequest request);
}
