package com.bonus.canteen.core.account.service;

import com.bonus.canteen.core.account.domain.AccountInfo;
import com.bonus.canteen.core.account.domain.WalletBalanceVO;
import com.bonus.canteen.core.account.domain.param.*;
import com.bonus.canteen.core.account.domain.vo.AccInfoDetailsVO;
import com.bonus.canteen.core.account.domain.vo.AccInfoInvalidSumVO;
import com.bonus.canteen.core.account.domain.vo.AccOperationListVO;
import com.bonus.system.api.domain.SysUser;

import java.util.List;

/**
 * 账户资料Service接口
 * 
 * @author xsheng
 * @date 2025-04-05
 */
public interface IAccInfoService {
    /**
     * 查询账户资料
     * 
     * @param id 账户资料主键
     * @return 账户资料
     */
    public AccountInfo selectAccInfoById(Long id);

    /**
     * 查询账户资料列表
     * 
     * @return 账户资料集合
     */
    public List<AccInfoDetailsVO> selectAccInfoList(AccountInfoQueryParam accountInfoQueryParam);

//    public List<AccInfoVo> selectAccInfoVoList(AccInfo accInfo);

    /**
     * 新增账户资料
     * 
     * @param accountInfo 账户资料
     * @return 结果
     */
    public int insertAccInfo(AccountInfo accountInfo);

    /**
     * 修改账户资料
     * 
     * @return 结果
     */
    public void updateAccInfo(AccountBalanceEditParam accountBalanceEditParam);

    /**
     * 批量删除账户资料
     * 
     * @param ids 需要删除的账户资料主键集合
     * @return 结果
     */
    public int deleteAccInfoByIds(Long[] ids);

    AccInfoInvalidSumVO queryAccInfoInvalidSum();
    AccInfoDetailsVO queryAccInfoBalanceSum(AccountInfoQueryParam accountInfoQueryParam);
    void editAccountStatus(AccountEnableDisableParam accountEnableDisableParam);
    public int deleteAccInfoByUserIds(List<SysUser> users);

    public int syncAccInfo(SysUser sysUser);

    public String getOrderQRCode();

    public WalletBalanceVO queryWalletBalance(AccountInfo accountInfo);
    List<AccInfoDetailsVO> queryAccInfoByUserIds(List<Long> userIds);
    AccInfoDetailsVO queryAccInfoByUserId(Long userId);
    void checkAccStatus(AccInfoDetailsVO accInfoVO);
    void individualAccRecharge(AccRechargeParam param);
    void individualAccWithdraw(AccWithdrawParam param);
    void individualAccLeaveClear(AccLeaveClearParam param);
    List<AccOperationListVO> queryAccPersonalWalOperationAddList(AccWalletOperationQueryParam param);
}
