package com.ga.core.mapper.settle;

import com.ga.core.vo.settle.TaxInvoiceResp;
import com.ga.core.vo.settle.TaxInvoiceSearchParam;
import com.ga.core.vo.settle.TaxInvoiceVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * 세금계산서 발행 이력 Mapper
 * tax_invoice 테이블 CRUD + 취소 처리.
 */
@Mapper
public interface TaxInvoiceMapper {

    /** 세금계산서 목록 조회 (페이징) */
    List<TaxInvoiceResp> selectList(TaxInvoiceSearchParam param);

    /** 세금계산서 단건 조회 (응답 조인 포함) */
    TaxInvoiceResp selectById(@Param("invoiceId") Long invoiceId);

    /** 세금계산서 단건 조회 (발행 번호) */
    TaxInvoiceVO selectByInvoiceNo(@Param("invoiceNo") String invoiceNo);

    /**
     * 정산월별 매출세금계산서 합계금액 조회.
     * 부가세 정산 집계 시 사용.
     */
    BigDecimal sumSupplyAmountByMonth(@Param("settleMonth") String settleMonth,
                                      @Param("invoiceType") String invoiceType);

    /** 세금계산서 발행 등록 */
    int insert(TaxInvoiceVO vo);

    /** 세금계산서 취소 처리 */
    int cancel(@Param("invoiceId") Long invoiceId,
               @Param("cancelDate") LocalDate cancelDate,
               @Param("cancelReason") String cancelReason);
}
