package nlib.cmm.service;

public class PagingVO {

	public final int DEFAULT_PAGE_SIZE = NlibProperty.getInt("list.paging.page.size", 10);
	
	private int pageIndex = 1; 		/* 페이지 번호 */
	private int pageSize = DEFAULT_PAGE_SIZE; /* 페이지 크기 (1페이지당 보여줄 자료건수) */
	private int totRecordCount = 0;	/* 총건수 */
	private int pageStart = 0; /* 시작번호 (limit용)*/
	private int startPage = 0; /*시작페이지 */
	private int endPage = 0;	/* 끝페이지 */
	private int lastPage = 0; /* 마지막페이지 */
	
	private int cntPage = DEFAULT_PAGE_SIZE; /* 노출되는 페이지 개수 ex) << < 1 2 3 4 5 > >> */
	
	public int getStartPage() {
		return startPage;
	}

	public int getCntPage() {
		return cntPage;
	}

	public void setCntPage(int cntPage) {
		this.cntPage = cntPage;
	}

	public void setStartPage(int startPage) {
		this.startPage = startPage;
	}

	public int getEndPage() {
		return endPage;
	}

	public void setEndPage(int endPage) {
		this.endPage = endPage;
	}

	public int getLastPage() {
		return lastPage;
	}

	public void setLastPage(int lastPage) {
		this.lastPage = lastPage;
	}

	public int getPageStart() {
		return pageStart;
	}

	public void setPageStart(int pageStart) {
		this.pageStart = pageStart;
	}

	public int getPageIndex() {
		return pageIndex;
	}
	
	public void setPageIndex(int pageIndex) {
		if(pageIndex < 1) pageIndex = 1;
		else this.pageIndex = pageIndex;
	}
	
	public void setPageIndex(String sPageIndex) {
		try {
			pageIndex = Integer.parseInt(sPageIndex);
		} catch(Exception e) {
			pageIndex = 1;
		}
	}
	
	public int getPageSize() {
		return pageSize;
	}
	
	public void setPageSize(int pageSize) {
		if(pageSize < 1) pageSize = DEFAULT_PAGE_SIZE;
		else this.pageSize = pageSize;
	}
	
	public void setPageSize(String sPageSize) {
		try {
			pageSize = Integer.parseInt(sPageSize);
		} catch(Exception e) {
			pageSize = NlibProperty.getInt("list.paging.page.size", 10);
		}
	}
	
	public int getTotRecordCount() {
		return totRecordCount;
	}
	
	public void setTotRecordCount(int totRecordCount) {
		this.totRecordCount = totRecordCount;
	}
	
	public int getPageStartRowNum() {
		
		if(pageIndex < 1) pageIndex = 1;
		if(pageSize < 1) pageSize = 10;
		
		return ((pageIndex - 1) * pageSize);
	}
	
	public void setPagingVO(int totRecordCount, int pageIndex, int pageSize) {
		setPageIndex(pageIndex);
		//현재 페이지
		setPageSize(pageSize);
		//페이지 당 게시글수
		setTotRecordCount(totRecordCount);
		//게시글 총 갯수
		calcLastPage(totRecordCount,pageSize);
		//제일 마지막 페이지 계산
		
		//시작 끝 페이지 계산 - 아래.
		calcStartEndPage(pageIndex, cntPage);
		setPageStart(pageIndex, pageSize);
		
	}
	// 제일 마지막 페이지 계산
		public void calcLastPage(int totRecordCount, int pageSize) {
			setLastPage((int) Math.ceil((double)totRecordCount / (double)pageSize));
		}
		// 시작, 끝 페이지 계산
		public void calcStartEndPage(int pageIndex, int cntPage) {
			setEndPage(((int)Math.ceil((double)pageIndex / (double)cntPage )) * cntPage );
			if (getLastPage() < getEndPage()) {
				setEndPage(getLastPage());
			} 
			if(getTotRecordCount() > 0)
			{
				if(getEndPage() % cntPage == 0)
				{
					setStartPage( 1 + (getEndPage() / cntPage - 1) * cntPage);
				}else {
					setStartPage(getEndPage() / cntPage * cntPage +1);
				}
			}
			if (getStartPage() < 1) {
				setStartPage(1);
			}
		}
		// DB 쿼리에서 사용할 start값 계산
		public void setPageStart(int pageIndex, int pageSize) {
			this.pageStart = ((pageIndex - 1) * pageSize);
		}
}
