using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using PolyTraderSharp.Models;

namespace PolyTrader.Modules.CopyTrading.Persistence
{
    /// <summary>
    /// Copytrading-eigener Trade-Log (Collection "closed_trades"). Enthält die kopierten,
    /// geschlossenen Trades mit Copytrading-Details (SourceTraderId etc.).
    /// Ergänzt später den generischen Core-Trade-Log (TradeRecord).
    /// </summary>
    public interface ICopyTradeLogRepository
    {
        void EnsureIndexes();

        /// <summary>Prüft, ob für Account + TokenId bereits ein Eintrag existiert (Dedup).</summary>
        bool Exists(int accountId, string tokenId);

        void Insert(ClosedTrade trade);

        /// <summary>
        /// Höchste vergebene TradeId (serverseitiges MAX, 0 wenn leer). Für die Fortsetzung der
        /// Trade-Nummerierung beim Start – ohne die komplette Tabelle in den Speicher zu laden.
        /// </summary>
        int GetMaxTradeId();

        /// <summary>Generische Abfrage (ersetzt die bisherigen LiteFind-Zugriffe).</summary>
        List<ClosedTrade> Find(Expression<Func<ClosedTrade, bool>> predicate);
    }
}
