package com.ga.core.mapper.settle;

import com.ga.core.vo.settle.PeriodCloseResp;
import com.ga.core.vo.settle.PeriodCloseSearchParam;
import com.ga.core.vo.settle.PeriodCloseVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 정산 마감 마스터 Mapper
 * period_close 테이블 CRUD + 마감 상태 조회.
 */
@Mapper
public interface PeriodCloseMapper {

    /** 마감 이력 목록 조회 (페이징) */
    List<PeriodCloseResp> selectList(PeriodCloseSearchParam param);

    /** 마감 단건 조회 (close_id) */
    PeriodCloseResp selectById(@Param("closeId") Long closeId);

    /** 마감 단건 조회 (close_month) */
    PeriodCloseVO selectByMonth(@Param("closeMonth") String closeMonth);

    /**
     * 해당 월이 현재 마감 상태인지 확인.
     * reopen_at IS NULL 인 레코드가 있으면 마감 중.
     * @return 마감 중이면 true
     */
    boolean isClosedMonth(@Param("closeMonth") String closeMonth);

    /** 마감 등록 */
    int insert(PeriodCloseVO vo);

    /** 재오픈 처리 (reopen_at, reopen_by, reopen_reason 업데이트) */
    int reopen(@Param("closeId") Long closeId,
               @Param("reopenBy") Long reopenBy,
               @Param("reopenReason") String reopenReason);
}
