package com.ga.core.mapper.settle;

import com.ga.core.vo.settle.TerminationSettlementResp;
import com.ga.core.vo.settle.TerminationSettlementSearchParam;
import com.ga.core.vo.settle.TerminationSettlementVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 해촉 정산 Mapper
 * termination_settlement 테이블 CRUD + 상태 변경.
 */
@Mapper
public interface TerminationSettlementMapper {

    /** 해촉 정산 목록 조회 (페이징) */
    List<TerminationSettlementResp> selectList(TerminationSettlementSearchParam param);

    /** 해촉 정산 단건 조회 (응답 조인 포함) */
    TerminationSettlementResp selectById(@Param("termSettleId") Long termSettleId);

    /** 해촉 정산 단건 조회 (VO, 도메인 로직용) */
    TerminationSettlementVO selectVoById(@Param("termSettleId") Long termSettleId);

    /** 설계사별 해촉 정산 조회 */
    TerminationSettlementVO selectByAgent(@Param("agentId") Long agentId);

    /** 해촉 정산 등록 */
    int insert(TerminationSettlementVO vo);

    /** 해촉 정산 수정 (금액 산출 후 업데이트) */
    int update(TerminationSettlementVO vo);

    /** 상태 변경 (CONFIRMED/PAID/CANCELLED) */
    int updateStatus(@Param("termSettleId") Long termSettleId,
                     @Param("status") String status,
                     @Param("userId") Long userId);

    /** 지급 처리 완료 (payment_id 연결) */
    int linkPayment(@Param("termSettleId") Long termSettleId,
                    @Param("paymentId") Long paymentId);
}
