import { AccessControlConditions, AuthSig } from '@lit-protocol/types'

interface IExternalPackageInit {
	LitJsSdkInstance: any
	SiweInstance?: any
	backendWalletPrivateKey?: string
}

export interface ILitProvider {
	isBrowser: boolean
	init?: (externalPackages: IExternalPackageInit) => Promise<void>
	getEncryptionClient: () => Promise<any>
	getActionsClient: (nodes?: number) => Promise<any>
	runJSFallback: <T>(
		javascriptCode: string,
		params: any,
		chain: string,
	) => Promise<{
		response: T
	}>
	runJS: <T>(
		client: any,
		ipfsId: string,
		publicKey: string,
		chain: string,
		params?: any,
		number?: number,
	) => Promise<{
		signatures: any
		response: T
		logs: string[]
	}>
	getAuthSig: (chain: string) => Promise<any>
	saveKey: (
		client: any,
		symmetricKey: string,
		conditions: AccessControlConditions,
		authSig: AuthSig,
		chain: string,
		permanent?: boolean,
	) => Promise<{
		encryptedSymmetricKey: any
		encryptedSymmetricKeyString: string
	}>
	updateConditionsKey: (
		client: any,
		encryptedSymmetricKey: any,
		symmetricKey: string,
		conditions: AccessControlConditions,
		authSig: AuthSig,
		chain: string,
		permanent?: boolean,
	) => Promise<void>
	recoverString: (
		client: any,
		encryptedString: string,
		encryptedSymmetricKey: string,
		conditions: AccessControlConditions,
		chain: string,
	) => Promise<string>
	encryptString: (
		string: string,
		chain: string,
	) => Promise<{
		encryptedString: string
		symmetricKey: string
		authSig: AuthSig
	}>
}
