import { IMessDbView } from '../../';
import { CONTRACT_INTERFACES, IChain, IPortfolioView, MyIdeaKeys } from '../../../../../';
interface Creator {
    creatorWallet: string;
    strategies: Set<string>;
    strategiesByOldest: string[];
    createdIdeasIndexesByOldest: string[];
}
interface IRebalanceMap {
    index: number;
    reference: string;
    ideaIndexes: string[];
}
interface MyContractDb {
    contractUniqueKey: string;
    chain: IChain;
    contractAddress: string;
    creators: Map<string, Creator>;
    creatorsByOldest: string[];
    userAccessStrategies: Map<string, Set<string>>;
    userSubscribedToStrategies: Map<string, Set<string>>;
    userAccessIdeaNfts: Map<string, Set<number>>;
    userAccessIdeaIndexesByOldest: Map<string, string[]>;
    userAccessIdeaKeysByStrategy: Map<string, Map<string, Set<number>>>;
    publicStrategies: Set<string>;
    publicStrategiesByOldest: string[];
    publicStrategiesFilled: Map<string, CONTRACT_INTERFACES.ITradeIdeaStrategy>;
    ideaIndexByOldest: string[];
    publicIdeaIndexByOldest: string[];
    ideaIndexByStrategyByOldest: Map<string, string[]>;
    ideaIndexToKeys: Map<string, MyIdeaKeys>;
    ideaIndexToData: Map<string, CONTRACT_INTERFACES.ITradeIdea>;
    allocationStrategyPortfolios: Map<string, IPortfolioView | 'ENCRYPTED'>;
    allocationRebalances: Map<string, IRebalanceMap[]>;
}
export interface MyDbViewState {
    contractDbs: Map<string, MyContractDb>;
    contractsByOldest: string[];
}
declare const getContractsInMemoryState: () => MyDbViewState;
declare const setContractsInMemoryState: (_state: MyDbViewState) => void;
interface IContractsInMemoryDbView extends IMessDbView {
    listAllContracts: () => Promise<string[]>;
    listAllStrategiesByContractAndUser: (uniqueContractKey: string, userWallet: string) => Promise<string[]>;
    getStrategyLastIdea: (uniqueStrategyReference: string) => Promise<CONTRACT_INTERFACES.ITradeIdea>;
    getStrategy: (uniqueStrategyReference: string) => Promise<CONTRACT_INTERFACES.ITradeIdeaStrategy>;
    getStrategyCreator: (uniqueStrategyReference: string) => Promise<CONTRACT_INTERFACES.ITradeIdeaCreator>;
    getCreator: (uniqueContractKey: string, creatorWallet: string) => Promise<CONTRACT_INTERFACES.ITradeIdeaCreator>;
    getStrategyWithCreator: (uniqueStrategyReference: string) => Promise<{
        strategy: CONTRACT_INTERFACES.ITradeIdeaStrategy;
        creator: CONTRACT_INTERFACES.ITradeIdeaCreator;
    }>;
    listAllIdeasIndexesByStrategy: (uniqueStrategyKey: string) => Promise<string[]>;
    listAllIdeasKeysByStrategy: (uniqueStrategyKey: string) => Promise<MyIdeaKeys[]>;
    listAllIdeasIndexesByContract: (uniqueContractKey: string) => Promise<string[]>;
    listAllPublicIdeasIndexesByContract: (uniqueContractKey: string) => Promise<string[]>;
    listCreatedByIdeasIndexesByContract: (uniqueContractKey: string, creatorWallet: string) => Promise<string[]>;
    listOwnedByIdeasIndexesByContract: (uniqueContractKey: string, ownerWallet: string) => Promise<string[]>;
    listOwnedByIdeasKeysByContract: (uniqueContractKey: string, ownerWallet: string) => Promise<MyIdeaKeys[]>;
    getIdeaKeys: (ideaIndex: string) => Promise<MyIdeaKeys>;
    getIdeaData: (ideaIndex: string) => Promise<CONTRACT_INTERFACES.ITradeIdea>;
    listContractCreatorStrategies: (uniqueContractKey: string, creatorWallet: string) => Promise<string[]>;
    listContractUserWithAccessibleIdeasStrategies: (uniqueContractKey: string, userWallet: string) => Promise<string[]>;
    listContractUserSubscribedToIdeasStrategies: (uniqueContractKey: string, userWallet: string) => Promise<string[]>;
    listContractUserAccessibleIdeas: (uniqueContractKey: string, userWallet: string) => Promise<number[]>;
    listContractUserAccessibleIdeasByStrategy: (uniqueContractKey: string, userWallet: string, uniqueStrategyKey: string) => Promise<number[]>;
    listContractWithPublicIdeasStrategies: (uniqueContractKey: string) => Promise<string[]>;
    getStrategyPortfolio: (uniqueStrategyReference: string) => Promise<IPortfolioView | 'ENCRYPTED'>;
    getStrategyRebalances: (uniqueStrategyReference: string) => Promise<IRebalanceMap[]>;
    getStrategyRebalance: (uniqueStrategyReference: string, rebalanceReference: string) => Promise<IRebalanceMap>;
    getStrategyRebalancesInPeriod: (uniqueStrategyReference: string, startDate: number, endDate: number) => Promise<IRebalanceMap[]>;
}
declare const contractsInMemoryDbView: IContractsInMemoryDbView;
export { IContractsInMemoryDbView, contractsInMemoryDbView, getContractsInMemoryState, setContractsInMemoryState, };
