import { CrudRepository, OCPP1_6, OCPP2_0_1, SystemConfig } from '@citrineos/base';
import { IChargingStationSequenceRepository, type ITransactionEventRepository } from '../../../interfaces';
import { MeterValue, StartTransaction, StopTransaction, Transaction, TransactionEvent } from '../model/TransactionEvent';
import { SequelizeRepository } from './Base';
import { IdToken } from '../model/Authorization';
import { Evse } from '../model/DeviceModel';
import { Sequelize } from 'sequelize-typescript';
import { ILogObj, Logger } from 'tslog';
import { Connector } from '../model/Location';
export declare class SequelizeTransactionEventRepository extends SequelizeRepository<TransactionEvent> implements ITransactionEventRepository {
    transaction: CrudRepository<Transaction>;
    evse: CrudRepository<Evse>;
    idToken: CrudRepository<IdToken>;
    meterValue: CrudRepository<MeterValue>;
    startTransaction: CrudRepository<StartTransaction>;
    stopTransaction: CrudRepository<StopTransaction>;
    connector: CrudRepository<Connector>;
    chargingStationSequence: IChargingStationSequenceRepository;
    constructor(config: SystemConfig, logger?: Logger<ILogObj>, namespace?: string, sequelizeInstance?: Sequelize, transaction?: CrudRepository<Transaction>, evse?: CrudRepository<Evse>, idToken?: CrudRepository<IdToken>, meterValue?: CrudRepository<MeterValue>, startTransaction?: CrudRepository<StartTransaction>, stopTransaction?: CrudRepository<StopTransaction>, connector?: CrudRepository<Connector>, chargingStationSequence?: IChargingStationSequenceRepository);
    /**
     * @param value TransactionEventRequest received from charging station. Will be used to create TransactionEvent,
     * MeterValues, and either create or update Transaction. IdTokens (and associated AdditionalInfo) and EVSEs are
     * assumed to already exist and will not be created as part of this call.
     *
     * @param stationId StationId of charging station which sent TransactionEventRequest.
     *
     * @returns Saved TransactionEvent
     */
    createOrUpdateTransactionByTransactionEventAndStationId(value: OCPP2_0_1.TransactionEventRequest, stationId: string): Promise<Transaction>;
    readAllByStationIdAndTransactionId(stationId: string, transactionId: string): Promise<TransactionEvent[]>;
    readTransactionByStationIdAndTransactionId(stationId: string, transactionId: string): Promise<Transaction | undefined>;
    /**
     * @param stationId StationId of the charging station where the transaction took place.
     * @param evse Evse where the transaction took place.
     * @param chargingStates Optional list of {@link ChargingStateEnumType}s the transactions must be in.
     * If not present, will grab transactions regardless of charging state. If not present, will grab transactions
     * without charging states, such as transactions started when a parking bay occupancy detector detects
     * an EV (trigger reason "EVDetected")
     *
     * @returns List of transactions which meet the requirements.
     */
    readAllTransactionsByStationIdAndEvseAndChargingStates(stationId: string, evse?: OCPP2_0_1.EVSEType, chargingStates?: OCPP2_0_1.ChargingStateEnumType[] | undefined): Promise<Transaction[]>;
    readAllActiveTransactionsIncludeTransactionEventByIdToken(idToken: OCPP2_0_1.IdTokenType): Promise<Transaction[]>;
    readAllActiveTransactionsIncludeStartTransactionByIdToken(idToken: string): Promise<Transaction[]>;
    readAllMeterValuesByTransactionDataBaseId(transactionDataBaseId: number): Promise<MeterValue[]>;
    findByTransactionId(transactionId: string): Promise<Transaction | undefined>;
    getTransactions(dateFrom?: Date, dateTo?: Date, offset?: number, limit?: number): Promise<Transaction[]>;
    getTransactionsCount(dateFrom?: Date, dateTo?: Date): Promise<number>;
    readAllTransactionsByQuery(query: object): Promise<Transaction[]>;
    getEvseIdsWithActiveTransactionByStationId(stationId: string): Promise<number[]>;
    getActiveTransactionByStationIdAndEvseId(stationId: string, evseId: number): Promise<Transaction | undefined>;
    createMeterValue(meterValue: OCPP2_0_1.MeterValueType, transactionDatabaseId?: number | null): Promise<void>;
    updateTransactionTotalCostById(totalCost: number, id: number): Promise<void>;
    updateTransactionByMeterValues(meterValues: MeterValue[], stationId: string, transactionId: number): Promise<void>;
    createTransactionByStartTransaction(request: OCPP1_6.StartTransactionRequest, stationId: string): Promise<Transaction>;
    createStopTransaction(transactionDatabaseId: number, stationId: string, meterStop: number, timestamp: Date, meterValues: MeterValue[], reason?: string, idTokenDatabaseId?: number): Promise<StopTransaction>;
}
