package wenrgise.ejb.common.utility;

import wenrgise.common.vo.BaseQueryVO;
import wenrgise.common.vo.DetailSizeValues;

public class PositionResolver {
  public static long getStartPosition(BaseQueryVO oBaseQueryVO, long lTotalCount) {
    int iMaxHeaderSize = oBaseQueryVO.getMaxHeaderSize();
    long lPositionRequested = oBaseQueryVO.getPositionRequested();
    if (lPositionRequested != 0L) {
      long l;
      return l = lPositionRequested;
    } 
    int iStep = (int)(lTotalCount / iMaxHeaderSize);
    long lStartPosition;
    return lStartPosition = (iStep * iMaxHeaderSize + 1);
  }
  
  public static long getLastPosition(BaseQueryVO oBaseQueryVO, long lTotalCount) {
    long lLastPosition;
    int iMaxHeaderSize = oBaseQueryVO.getMaxHeaderSize();
    long lPositionRequested = oBaseQueryVO.getPositionRequested();
    if (lPositionRequested != 0L) {
      if (lPositionRequested + iMaxHeaderSize - 1L < lTotalCount) {
        lLastPosition = lPositionRequested + iMaxHeaderSize - 1L;
      } else {
        lLastPosition = lTotalCount;
      } 
    } else {
      lLastPosition = lTotalCount;
    } 
    return lLastPosition;
  }
  
  public static long getDetailFirstPosition(int iStartPage, long lTotalDetailRecord, DetailSizeValues oDetailSizeValues) {
    int iDetailRecordPerPage = oDetailSizeValues.getDetailRecordPerPage();
    int iMaxPage = oDetailSizeValues.getMaxPages();
    if (lTotalDetailRecord > ((iStartPage - 1) * iDetailRecordPerPage))
      return ((iStartPage - 1) * iDetailRecordPerPage + 1); 
    return 1L;
  }
  
  public static long getDetailLastPosition(int iStartPage, long lTotalDetailRecord, DetailSizeValues oDetailSizeValues) {
    int iDetailRecordPerPage = oDetailSizeValues.getDetailRecordPerPage();
    int iMaxPage = oDetailSizeValues.getMaxPages();
    if (lTotalDetailRecord > ((iStartPage + iMaxPage - 1) * iDetailRecordPerPage))
      return ((iStartPage + iMaxPage - 1) * iDetailRecordPerPage); 
    return lTotalDetailRecord;
  }
}
