package com.iamberry.wechat.face.giftCard;

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

import com.iamberry.wechat.core.entity.giftCard.AgentInfo;
import com.iamberry.wechat.core.entity.giftCard.CardCashInfo;
import com.iamberry.wechat.core.entity.giftCard.GiftCardDto;
import com.iamberry.wechat.core.entity.giftCard.GiftCardInfo;
import com.iamberry.wechat.core.entity.giftCard.UserMachineInfo;
import com.iamberry.wechat.core.entity.product.ProductColor;

/**
 * 兑换卡Service 接口
 * @company	深圳爱贝源科技有限公司
 * @website www.iamberry.com
 * @author 	献
 * @tel		18271840547
 * @date	2017年2月16日
 */
public interface GiftCardService {

	/**
	 * 根据兑换卡密码获取兑换卡信息
	 * @param card
	 * @return
	 * @author 献
	 * @Time   2017年2月16日
	 */
	public GiftCardInfo get(String card);

	/**
	 * 万元小代理信息 提货卡提货
	 * @param cardInfo	提货卡信息
	 * @param cardPwd	礼品卡唯一兑换密码
	 * @param  agentInfo   当前万元小代理信息
	 * @return
	 * @author 献
	 * @Time   2017年2月16日
	 */
	public Map<String,Object> salesCard(GiftCardInfo cardInfo, UserMachineInfo info, AgentInfo agentInfo)throws Exception ;

	/**
	 * 
	 * @param productId
	 * @return
	 * @author 献
	 * @Time   2017年2月16日
	 */
	public List<ProductColor> getColor(Integer productId);

	/**
	 * 根据用户的openid 获取兑换记录
	 * @param openid
	 * @return
	 * @author 献
	 * @Time   2017年2月16日
	 */
	public List<UserMachineInfo> list(String openid);
	
	/**
	 * 获取一页的待发货的兑换数据
	 * @param min
	 * @param max
	 * @return
	 * @author 献
	 * @Time   2017年2月16日
	 */
	public List<UserMachineInfo> page(int pageNO, int pageSize);

	/**
	 * 获取总的待处理兑换记录条数
	 * @return
	 * @author 献
	 * @Time   2017年2月16日
	 */
	public int count();

	/**
	 * 修改兑换信息
	 * @param info
	 * @return
	 * @author 献
	 * @Time   2017年2月17日
	 */
	public int update(UserMachineInfo info);
	
	/**
	 * 批量添加礼品卡信息和添加机器物流信息
	 * @param cardList
	 * @param agentMachine
	 * @return
	 */
	public Integer insertCardAndMachine(List<GiftCardInfo> cardList, Integer userMachineId, Integer referrerMachineId);
	
	/**
	 * 批量添加礼品卡信息和修改机器物流信息
	 * @param rechargeType     充值类型    1：普通充值      2：百台代理充值<需生成100张提货卡>
	 * @param openId   当前用户openid
	 * @param userMachineId    当前付费代理赠送机器记录id
	 * @param referrerMachineId    赠送推荐人机器记录id
	 * @return
	 */
	public boolean saveCardAndMachine(int rechargeType, String openId, Integer userMachineId, Integer referrerMachineId) throws Exception;
	
	/**
	 * 批量添加礼品卡信息
	 * @param openId
	 * @param cardNum
	 * @return
	 */
	public boolean saveCardList (String openId, int cardNum);
	
	/**
	 * 根据礼品卡密码查询该密码是否已经存在
	 * @param cardPassword
	 * @return
	 */
	public Integer selectCardByPassward(String cardPassword);
	
	/**
	 * 通过cardId和openId查询礼品卡详情
	 * @param giftCardDto
	 * @return
	 */
	public GiftCardDto selectCardInfo(GiftCardDto giftCardDto);
	
	/**
	 * 根据礼品卡旧状态修改新状态
	 * @param giftCardDto
	 * @return
	 */
	public Integer updateCardStatus(GiftCardDto giftCardDto);
	
	/**
	 * 申请兑现，修改礼品卡状态，在礼品卡兑现表添加记录
	 * @param giftCardDto
	 * @param cardCashInfo
	 * @return
	 */
	public boolean applyCash(GiftCardDto giftCardDto, CardCashInfo cardCashInfo);
	
	/**
	 * 分页查询礼品卡兑现列表
	 * @param cardCashInfo
	 * @return
	 */
	public List<CardCashInfo> selectCardCashList(CardCashInfo cardCashInfo);
	
	/**
	 * 查询礼品卡兑现的总页数
	 * @param cardCashInfo
	 * @return
	 */
	public Integer selectCardCashCount(CardCashInfo cardCashInfo);
	
	/**
	 * 根据状态和id修改兑现记录状态
	 * @param cardCashInfo
	 * @return
	 */
	public Integer updateCardCashStatus(CardCashInfo cardCashInfo);
	
	/**
	 * 分页查询个人所有礼品卡数据
	 * @param giftCardDto
	 * @return
	 */
	public List<GiftCardDto> selectCardList(GiftCardDto giftCardDto);
	
	/**
     * 查询个人所有礼品卡总数
     * @param giftCardDto
     * @return
     */
    public int countCard(GiftCardDto giftCardDto);
}
