import { AccessControlConditions } from '@lit-protocol/types'
import { ILitProvider, rest } from '../activ-v4'

/*
 This is just a mock for testing
*/
const init = async (externalPackages: {
	LitJsSdkInstance: any
	SiweInstance?: any
	backendWalletPrivateKey?: string
}) => {}

const connect = async () => {
	await rest(50)
}

const getEncryptionClient = async () => {
	return { connect }
}

const getActionsClient = async () => {
	return { connect }
}

const getAuthSig = async (): Promise<any> => {
	return {
		dummy: 'authSig',
	}
}

const encryptString = async (
	message: string,
): Promise<{ encryptedString: any; symmetricKey: any; authSig: any }> => {
	const authSig = await getAuthSig()
	return {
		encryptedString: message,
		symmetricKey: 'dummyKey',
		authSig,
	}
}

const saveKey = async (
	client: any,
	symmetricKey: any,
	accessControlConditions: any[],
	authSig: any,
	chain: string,
	permanent: boolean = true,
): Promise<{
	encryptedSymmetricKey: any
	encryptedSymmetricKeyString: string
}> => {
	return {
		encryptedSymmetricKey: {
			dummy: 'encryptedSymmetricKey',
		},
		encryptedSymmetricKeyString: symmetricKey,
	}
}

const updateConditionsKey: any = async (
	client: any,
	encryptedSymmetricKey: any,
	symmetricKey: string,
	accessControlConditions: AccessControlConditions,
	authSig: any,
	chain: string,
	permanent: boolean = true,
): Promise<void> => {
	await rest(50)
}

const recoverString = async <T>(
	client: any,
	encryptedString: string,
	encryptedSymmetricKey: string,
	accessControlConditions: T[],
): Promise<string> => {
	return encryptedString
}

const runJSFallback = async <T>(
	javascriptCode: string,
	params: any,
): Promise<{
	response: T
}> => {
	return {
		response: {
			getNonceToSign: 'dummyNonce',
		} as T,
	}
}

const runJS = async <T>(client: any, javascriptCode: string, params: any) => {
	return null as T
}

export const LitNodeProviderModuleMock: ILitProvider = {
	isBrowser: false,
	init,
	getEncryptionClient,
	getActionsClient,
	getAuthSig,
	saveKey,
	recoverString,
	encryptString,
	updateConditionsKey,
	runJSFallback,
	runJS,
}
