package org.jpos.tcpay.db.repository;

import org.jpos.tcpay.db.entity.AcquirerTerminal;
import org.jpos.tcpay.db.entity.AcquirerTerminalBatch;

import java.time.LocalDate;
import java.util.Optional;

public interface AcquirerTerminalBatchRepository {
    
    /**
     * Find AcquirerTerminalBatch by acquirer terminal ID
     */
    Optional<AcquirerTerminalBatch> findByAcquirerTerminalId(AcquirerTerminal acquirerTerminalId);
    
    /**
     * Save or update AcquirerTerminalBatch
     */
    AcquirerTerminalBatch save(AcquirerTerminalBatch acquirerTerminalBatch);
    
    /**
     * Create new AcquirerTerminalBatch if not exists
     */
    AcquirerTerminalBatch findOrCreate(AcquirerTerminal acquirerTerminalId);
    
    /**
     * Get and increment the Batch number atomically
     */
    Integer getAndIncrementBatch(AcquirerTerminal acquirerTerminalId);
    
    /**
     * Reset Batch number to 1 if date has changed
     */
    void resetBatchIfNeeded(AcquirerTerminal acquirerTerminalId, LocalDate currentDate);
}