package nlib.col.service;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import nlib.util.StringUtil;

public interface CartService
{

	/**
	 * (로그인자용) 로그인한 사용자의 카트 목록을 조회한다. 
	 * 
	 * @param mbInfoId
	 * @param cartDivCd
	 * @return
	 * @throws Exception
	 */
	public List<CollectionVO> listCartItems(String mbInfoId, String cartTypeCd) throws Exception;
	
	/**
	 * (비로그인자용) 쿠키에서 카트 목록을 조회한다. 
	 * 
	 * @param request
	 * @param cartDivCd
	 * @return
	 * @throws Exception
	 */
	public List<CollectionVO> listCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartDivCd) throws Exception;
	
	/**
	 * (로그인자용) 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람)
	 * 
	 * @param mbInfoId
	 * @param targetCartItems
	 * @return
	 * @throws Exception
	 */
	public String changeCartType(CollectionVO cartVO) throws Exception;
	
	/**
	 * (비로그인자용) 카트 영역 구분코드를 변경한다. (대출 <-> 방문열람)
	 * 
	 * @param request
	 * @param targetCartItems
	 * @return
	 * @throws Exception
	 */
	public String changeCartTypeToCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception;
	
	/**
	 * (로그인자용) 카트에 추가한다. 
	 * 
	 * @param cartVO
	 * @return
	 * @throws Exception
	 */
	public String insertCartItem(CollectionVO cartVO) throws Exception;
	
	/**
	 * (비로그인자용) 카트에 추가한다. 
	 * 
	 * @param cartVO
	 * @return
	 * @throws Exception
	 */
	public String insertCartItemToCookie(HttpServletRequest request,  HttpServletResponse response, CollectionVO cartVO) throws Exception;
	
	/**
	 * (로그인자용) 카트에서 선택된 자료들을 삭제한다. 
	 * 
	 * @param targetCartItems
	 * @return
	 * @throws Exception
	 */
	public String deleteCartItems(CollectionVO cartVO) throws Exception;

	/**
	 * (비로그인자용) 카트에서 선택된 자료들을 삭제한다. 
	 * 
	 * @param targetCartItems
	 * @return
	 * @throws Exception
	 */
	public String deleteCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, CollectionVO cartVO) throws Exception;
	

	/**
	 * 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다.  
	 * 
	 * @param mbInfoId
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	public int mergeCart(String mbInfoId, HttpServletRequest request, HttpServletResponse response) throws Exception;
	
	/**
	 * 쿠키 카트(비로그인 상태의 카트정보)에 존재하는 자료 개수를 리턴한다. 
	 * 
	 * @param request
	 * @param response
	 * @param cartTypeCd
	 * @return
	 * @throws Exception
	 */
	public int countCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception;
	
	/**
	 * 사용자 카트의 자료 개수를 리턴한다.  
	 *  
	 * @param mbInfoId
	 * @param cartTypeCd
	 * @return
	 * @throws Exception
	 */
	public int countCartItems(String mbInfoId, String cartTypeCd) throws Exception;
	
}