package com.ga.core.mapper.approval;

import com.ga.core.vo.approval.ApprovalRequestResp;
import com.ga.core.vo.approval.ApprovalRequestSearchParam;
import com.ga.core.vo.approval.ApprovalRequestVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * approval_request Mapper — 결재 요청.
 */
@Mapper
public interface ApprovalRequestMapper {

    ApprovalRequestResp selectById(@Param("requestId") Long requestId);

    List<ApprovalRequestResp> selectList(ApprovalRequestSearchParam param);

    int insert(ApprovalRequestVO vo);

    /**
     * 결재 단계 진행 — approval_history 삽입 + current_step 갱신 + 최종 상태 반영.
     * Service에서 트랜잭션으로 묶는 것이 원칙이나,
     * 핵심 단계 진행 UPDATE를 단일 메서드로 제공.
     *
     * @param requestId  결재 요청 PK
     * @param approverId 결재자 user_id
     * @param action     APPROVE / REJECT / RETURN
     * @param comment    결재 코멘트
     * @return 업데이트 행 수
     */
    int advanceStep(@Param("requestId") Long requestId,
                    @Param("approverId") Long approverId,
                    @Param("action") String action,
                    @Param("comment") String comment);

    int updateStatus(@Param("requestId") Long requestId, @Param("status") String status);

    int cancel(@Param("requestId") Long requestId);
}
