package com.bb.util;

import com.bb.model.PageFormVO;

/**
 * 페이지 네비게이션 정보 설정을 위한 클래스
 */
public class PagingUtil {
	
	
	

	public static PageFormVO setPageUtil(PageFormVO pageFormVO) {
		//System.out.println("currentPage" + pageFormVO.getPage());
		if(pageFormVO.getPage() == 0) {
			//System.out.println("currentPagee" + pageFormVO.getPage());
			pageFormVO.setPage(1);
		}
		//System.out.println("currentPage" + pageFormVO.getPage());

		String pagination = ""; // 페이징 결과 값
		String functionName = pageFormVO.getFunction_name(); // 페이징 목록을 요청하는 자바스크립트 함수명
		int currentPage = pageFormVO.getPage(); // 현재 페이지 번호
		
		//System.out.println("currentPage" + currentPage);
		int countPerList = pageFormVO.getCount_per_list(); // 한 화면에 출력될 게시물 수
		int countPerPage = pageFormVO.getCount_per_page(); // 한 화면에 출력될 페이지 수
		int totalListCount = pageFormVO.getTatal_list_count(); // 총 게시물 수
		int totalPageCount = totalListCount / countPerList; // 총 페이지 수
		if (totalListCount % countPerList > 0) { // 총 페이수를 구할 때 int형으로 계산하면 나머지가 있는 경우 게시물이 존재하기 때문에 총 페이지의 수를 수정
			totalPageCount = totalPageCount + 1;
		}

		int viewFirstPage = (((currentPage - 1) / countPerPage) * countPerPage) + 1; // 한 화면에 첫 페이지 번호
		int ViewLastPage = viewFirstPage + countPerPage - 1; // 한 화면에 마지막 페이지 번호
		if (ViewLastPage > totalPageCount) { // 마지막 페이지의 수가 총 페이지의 수보다 큰 경우는 게시물이 존재하지 않기 때문에 마지막 페이지의 수를 수정
			ViewLastPage = totalPageCount;
		}

		int totalFirstPage = 1; // 전체 페이지 중에 처음 페이지
		int totalLastPage = totalPageCount; // 전체 페이지 중에 마지막 페이지
		int prePerPage = 0; // 이전 화면에 첫번째 번호
		if (viewFirstPage - countPerPage > 0) {
			prePerPage = viewFirstPage - countPerPage;
		} else {
			prePerPage = totalFirstPage;
		}
		int nextPerPage = 0; // 이후 화면에 첫번째 번호
		if (viewFirstPage + countPerPage < totalPageCount) {
			nextPerPage = viewFirstPage + countPerPage;
		} else {
			nextPerPage = totalPageCount;
		}

		// 페이지 네이게이션 설정
		
		
		pagination += " <div class=\"pagenation-wrap\">";
	//	pagination += "	<div class=\"dataTables_info\" id=\"DataTables_Table_3_info\" role=\"status\" aria-live=\"polite\">Total Page :" + totalPageCount +"</div>";
//		pagination += "	<div class=\"dataTables_paginate paging_simple_numbers\" id=\"DataTables_Table_3_paginate\">";
		//pagination += "	<a href='javascript:" + functionName + "(" + prePerPage + ");' class=\"paginate_button previous\" aria-controls=\"DataTables_Table_3\" >←</a>";
		
		pagination += " <button type=\"button\" onclick='javascript:"+ functionName + "(" + prePerPage + ");'><i class=\"fas fa-angle-double-left\"></i></button>";
		
		//pagination += "		<span>";
		for (int a = viewFirstPage; a <= ViewLastPage; a++) {
			if (a == currentPage) {
			//	pagination += "   <a href='javascript:" + functionName +"(" + a + ");'class=\"paginate_button current\" aria-controls=\"DataTables_Table_3\" >"+a+"</a>";
			//	pagination += "   <a href='javascript:" + functionName +"(" + a + ");'class=\"paginate_button current\" aria-controls=\"DataTables_Table_3\" >"+a+"</a>";
				pagination += "   <button type=\"button\"  onclick='javascript:"+ functionName + "(" + a + ");' class=\"active\">"+a+"</button>";
			} else {
				pagination += "   <button type=\"button\"  onclick='javascript:"+ functionName + "(" + a + ");' >"+a+"</button>";
			}
		}		
		//pagination += "			</span>";
	//	pagination += "		<a href='javascript:" + functionName + "(" + nextPerPage + ");'  class=\"paginate_button next \" aria-controls=\"DataTables_Table_3\" >→</a>";
		pagination += " <button type=\"button\" onclick='"+ functionName + "(" + nextPerPage + ");'><i class=\"fas fa-angle-double-right\"></i></button>";
		//pagination += "	</div>";
		pagination += "  </div>";
		
		int offset = ((currentPage - 1) * countPerList) ; // 한 화면의 표출되는 게시물의 시작 번호의 -1 (쿼리 조건절)

		// LIMIT는 가져올 row의 수, OFFSET은 몇 번째 row부터 가져올지를 결정
		pageFormVO.setLimit(countPerList);
		pageFormVO.setOffset(offset);
		pageFormVO.setPagination(pagination);

		return pageFormVO;
	}
}
