package org.jpos.tcpay.db.repository;

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

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

public interface AcquirerTerminalStanRepository {
    
    /**
     * Find AcquirerTerminalStan by acquirer terminal ID
     */
    Optional<AcquirerTerminalStan> find(final AcquirerTerminal acquirerTerminal);
    
    /**
     * Save or update AcquirerTerminalStan
     */
    AcquirerTerminalStan save(AcquirerTerminalStan acquirerTerminalStan);
    
    /**
     * Create new AcquirerTerminalStan if not exists
     */
    AcquirerTerminalStan findOrCreate(final AcquirerTerminal acquirerTerminal);
    
    /**
     * Get and increment the Stan number atomically
     */
    Integer getAndIncrementStan(final AcquirerTerminal acquirerTerminal);
    
    /**
     * Reset Stan number to 1 if date has changed
     */
    boolean resetStanIfNeeded(final AcquirerTerminal acquirerTerminal, LocalDate currentDate);
}