import {
	ICacheDBConfig,
	ICacheStorage,
	IContractRecipe,
	ILitProvider,
} from '../../'

export interface IWeb3AuthorizationOptions {
	userWalletPrivateKey?: string
	webProvider?: any // WEB3 PROVIDER
}
export interface IActivConfig {
	defaultBlockchainNetwork?: string
	defaultContract?: string | IContractRecipe
	web3AuthorizationOptions: IWeb3AuthorizationOptions
	litConfig?: {
		litProvider: ILitProvider // LIT PROVIDER DEPENDS IF IN BACKEND OR FRONTEND
		mock?: boolean
	}
	librarianConfig?: {
		sourceOfDataForValidation: 'standalone' | 'trusted-cache-server'
		sourceOfDataForViews: 'standalone' | 'trusted-cache-server'
	}
	mockProvableValidation?: boolean
	nftStorageKey?: string // ANYTHING THAT WORKS WORKS
	// gateContract?: Contract // ONLY FOR TESTING / DEVELOPMENT
	// viewsContract?: Contract // ONLY FOR TESTING / DEVELOPMENT
	// ipfsModule?: typeof IpfsStoreModule // OPTIONAL
	mockNftStorage?: boolean // ALWAYS TRUE FOR PRODUCTION
	usePinata?: { pinataApi: string; pinataSecret: string }
	mockLitPricing?: boolean // ALWAYS FALSE FOR PRODUCTION
	useProxyInPricing?: boolean
	skipPricingSignature?: boolean
	ipfsProxyEnabled?: boolean
	showLogsToDebug?: boolean
	singleConfig?: boolean
	cacheStorageConfig: {
		useCache?: boolean
		module: ICacheStorage // full/complete implementation of ICacheStorage
		dbParams?: ICacheDBConfig // db instance to use (optional)
		isBrowser: boolean // true if in browser, false if in node
	}
	dataSource?: {
		publicCache: {
			source: 'server' | 'local'
			customServerUrl?: string
			autoServe?: boolean
		}
	}
	// alchemySettings?: { alchemyApiKey: string }
}
