package com.iformall.service;

import com.github.pagehelper.PageInfo;
import com.iformall.domain.dto.WxCUserBasicInfoDto;
import com.iformall.domain.po.WxAuthorizerInfo;
import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.WxCreditHistory;
import com.iformall.domain.vo.UserCountVo;
import com.iformall.enums.EnumScoreType;
import me.chanjar.weixin.mp.bean.result.WxMpUser;

import java.util.List;
import java.util.Map;

public interface WxCUserService {

    /**
     * 根据实体查询分页列表
     *
     * @param record
     * @param pageIndex
     * @param pageSize
     * @return
     */
    PageInfo<WxCUser> listAsPage(WxCUser record, Integer pageIndex, Integer pageSize);

    /**
     * 根据Id获得实体
     *
     * @param id
     * @return
     */
    WxCUser getById(Long id);

    /**
     * 根据openId获得实体
     *
     * @param record
     * @return
     */
    WxCUser getByOpenId(WxCUser record);

    /**
     * 根据object获得实体
     *
     * @param record
     * @return
     */
    WxCUser getByObject(WxCUser record);

    /**
     * 保存或更新实体
     *
     * @param record
     */
    int saveOrUpdate(WxCUser record);

    /**
     * 保存或更新实体
     *
     * @param mpUser
     * @param authorizerInfo
     */
    int saveOrUpdateMpUser(WxMpUser mpUser, WxAuthorizerInfo authorizerInfo);

    /**
     * updateScene
     *
     * @param record
     */
    int updateScene(WxCUser record);

    /**
     * updateLBS
     *
     * @param record
     */
    int updateLBS(WxCUser record);

    /**
     * updateExtInfo
     *
     * @param record
     */
    int updateExtInfo(WxCUser record);

    /**
     * 根据Id删除实体
     *
     * @param id
     */
    void deleteById(Long id);

    /**
     * 统计数量
     * @param dto
     * @return
     */
    long findCount(WxCUserBasicInfoDto dto);

    /**
     * 统计数量
     * @param dto
     * @return
     */
    List<UserCountVo> findCountHistory(WxCUserBasicInfoDto dto);

    
    /**
     * 通过渠道获取会员信息
     * @param user
     * @param pageIndex
     * @param pageSize
     * @return
     */
    PageInfo<WxCUser> listByChannel(WxCUser user, Integer pageIndex, Integer pageSize);

    long countByChannel(WxCUser user);

    /**
     * 登录后发消息
     * @param user
     */
    void actionMsgAfterLogin(WxCUser user, Boolean findByUnionId);

    /**
     * 登录后处理
     * @param user
     * @return
     */
    int actionAfterLogin(WxCUser user, Boolean findByUnionId);

    /**
     * 积分
     * @param wxCUser
     * @param enumScoreType
     * @return
     */
    WxCreditHistory addCredit(WxCUser wxCUser, EnumScoreType enumScoreType);
}
