import ConnectionCode from "./ConnectionCode";
import WebSite from "./Website";
import Exploration from "./Exploration";
import Session from "./Session";
import AifexPluginInfo from "./AifexPluginInfo";
import ExplorationEvaluation from "./ExplorationEvaluation";
import Evaluator from "./Evaluator";
import Screenshot from "./Screenshot";
import CommentDistribution from "./CommentDistribution";

export default interface AifexService {
	getSession(webSiteId: string): Promise<Session | undefined> ;

	getWebSite(webSiteId: string): Promise<WebSite | undefined> ;

	hasModel(modelId: string): Promise<boolean> ;

	getProbabilityMap(
		connectionCode: ConnectionCode,
		exploration: Exploration
	): Promise<Map<string, number>> ;

	addExploration(
		connectionCode: ConnectionCode,
		testerName: string,
		exploration: Exploration
	): Promise<number> ;

	getCommentDistributions(connectionCode: ConnectionCode, exploration: Exploration): Promise<CommentDistribution[] | undefined> ;

	addScreenshotList(connectionCode: ConnectionCode, explorationNumber : number, list : Screenshot[]): Promise<void> ;

	addVideo(connectionCode: ConnectionCode, explorationNumber:number, video:Blob): Promise<void> ;

	getPluginInfo(): Promise<AifexPluginInfo> ;

	evaluateSequence(webSite: WebSite, exploration: Exploration): Promise<ExplorationEvaluation>;

	getEvaluator(webSiteId : string) : Promise<Evaluator | undefined>;

}