package kr.co.accura.wbx.spring.approval;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

/**
 * 결재 유형별 핸들러 인터페이스
 * @Component로 등록하면 ApprovalHandlerRegistry가 자동 수집
 */
public interface ApprovalHandler {

    /** 유형 키 (URL path에 사용) — e.g. "timesheet", "project" */
    String getTypeKey();

    /** 표시명 — e.g. "시수 결재" */
    String getTypeDisplay();

    /** 승인 처리 */
    ApprovalResult approve(Long approvalLineId, Long approverId, String comment);

    /** 반려 처리 */
    ApprovalResult reject(Long approvalLineId, Long approverId, String comment);

    /** 결재 이력 조회 (ApprovalLine.vue 호환) */
    ApprovalHistoryDto getApprovalHistory(Long itemId);

    /** 결재 대기 목록 */
    Page<ApprovalPendingDto> getPending(Long approverId, Pageable pageable);
}
