package incheon.com.cmm;

import org.egovframe.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer;

import javax.servlet.ServletContext;
import org.springframework.web.context.ServletContextAware;

/**
 * DefaultPaginationRenderer.java 클래스
 * 
 * KRDS 디자인 시스템 기반 기본 페이징 렌더러
 * 인천시 공간정보플랫폼 표준 페이징 디자인 적용
 * 
 * @author 개발팀
 * @since 2025.09.19
 * @version 1.0
 */
public class DefaultPaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware {

    private ServletContext servletContext;
    
    public DefaultPaginationRenderer() {
        
    }
    
    public void initVariables() {
        // KRDS 페이징 컨테이너 시작
        String paginationStart = "<div class=\"krds-pagination\">";
        String paginationEnd = "</div>";
        
        // 이전 페이지 버튼 (비활성화 상태)
        firstPageLabel = paginationStart +
                        "<span class=\"page-navi prev disabled\" title=\"처음\">이전</span>" +
                        "<div class=\"page-links\">";
        
        // 이전 페이지 버튼 (활성화 상태)
        previousPageLabel = "<a class=\"page-navi prev\" href=\"javascript:void(0)\" onclick=\"{0}({1});\" title=\"이전\">이전</a>";

        // 현재 페이지 (활성화된 상태) - span 사용으로 건너뛰기 링크 오인식 방지
        currentPageLabel = "<span class=\"page-link active\" title=\"현재 페이지 {0}\">{0}</span>";

        // 다른 페이지 번호들
        otherPageLabel = "<a class=\"page-link\" href=\"javascript:void(0)\" onclick=\"{0}({1});\" title=\"{2}\">{2}</a>";

        // 다음 페이지 버튼 (활성화 상태)
        nextPageLabel = "<a class=\"page-navi next\" href=\"javascript:void(0)\" onclick=\"{0}({1});\" title=\"다음\">다음</a>";
        
        // 마지막 페이지 버튼 (비활성화 상태)
        lastPageLabel = "</div>" +
                       "<span class=\"page-navi next disabled\" title=\"마지막\">다음</span>" +
                       paginationEnd;
    }

    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;
        initVariables();
    }
    
    /**
     * 페이지 링크를 렌더링합니다.
     * KRDS 디자인에 맞게 페이지 번호와 생략 표시(...) 처리
     */
    @Override
    public String renderPagination(org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo paginationInfo, String jsFunction) {
        StringBuilder result = new StringBuilder();
        
        int currentPageNo = paginationInfo.getCurrentPageNo();
        int totalPageCount = paginationInfo.getTotalPageCount();
        int pageSize = paginationInfo.getPageSize();
        
        // 페이징 컨테이너 시작
        result.append("<div class=\"krds-pagination\">");
        
        // 이전 버튼
        if (currentPageNo > 1) {
            result.append("<a class=\"page-navi prev\" href=\"javascript:void(0)\" onclick=\"")
                  .append(jsFunction).append("(").append(currentPageNo - 1).append(");\" title=\"이전\">이전</a>");
        } else {
            result.append("<span class=\"page-navi prev disabled\" title=\"이전\">이전</span>");
        }
        
        // 페이지 링크 컨테이너 시작
        result.append("<div class=\"page-links\">");
        
        // 페이지 번호 계산
        int startPage = ((currentPageNo - 1) / pageSize) * pageSize + 1;
        int endPage = Math.min(startPage + pageSize - 1, totalPageCount);
        
        // 첫 페이지가 1이 아닌 경우 1 표시
        if (startPage > 1) {
            result.append("<a class=\"page-link\" href=\"javascript:void(0)\" onclick=\"")
                  .append(jsFunction).append("(1);\" title=\"1\">1</a>");

            if (startPage > 2) {
                result.append("<span class=\"page-link link-dot\"></span>");
            }
        }
        
        // 페이지 번호들 표시
        for (int i = startPage; i <= endPage; i++) {
            if (i == currentPageNo) {
                result.append("<span class=\"page-link active\" title=\"현재 페이지 ").append(i).append("\">").append(i).append("</span>");
            } else {
                result.append("<a class=\"page-link\" href=\"javascript:void(0)\" onclick=\"")
                      .append(jsFunction).append("(").append(i).append(");\" title=\"").append(i).append("\">").append(i).append("</a>");
            }
        }
        
        // 마지막 페이지가 전체 페이지 수보다 작은 경우 마지막 페이지 표시
        if (endPage < totalPageCount) {
            if (endPage < totalPageCount - 1) {
                result.append("<span class=\"page-link link-dot\"></span>");
            }
            result.append("<a class=\"page-link\" href=\"javascript:void(0)\" onclick=\"")
                  .append(jsFunction).append("(").append(totalPageCount).append(");\" title=\"").append(totalPageCount).append("\">").append(totalPageCount).append("</a>");
        }
        
        // 페이지 링크 컨테이너 종료
        result.append("</div>");
        
        // 다음 버튼
        if (currentPageNo < totalPageCount) {
            result.append("<a class=\"page-navi next\" href=\"javascript:void(0)\" onclick=\"")
                  .append(jsFunction).append("(").append(currentPageNo + 1).append(");\" title=\"다음\">다음</a>");
        } else {
            result.append("<span class=\"page-navi next disabled\" title=\"다음\">다음</span>");
        }
        
        // 페이징 컨테이너 종료
        result.append("</div>");
        
        return result.toString();
    }
} 
