import {BlobClientResponse} from "../client/BlobClientResponse";
import {JsonClientResponse} from "../client/JsonClientResponse";
import {TextClientResponse} from "../client/TextClientResponse";
import {VoidClientResponse} from "../client/VoidClientResponse";
import {StreamProducer} from "../io/StreamProducer";
import {DialogProxy} from "./DialogProxy";
import {DialogRequest} from "./DialogRequest";

export interface DialogDelegate {

    initialize(dialogProxy: DialogProxy): Promise<void>;

    isAnyUserInBriefcaseMode(tenantId: string): Promise<boolean>;

    isUserInBriefcaseMode(userInfo:{}): Promise<boolean>;

    getBlob(request: DialogRequest): Promise<BlobClientResponse>;

    getText(request: DialogRequest): Promise<TextClientResponse>;

    openStream(request: DialogRequest): Promise<StreamProducer>;

    postMultipart<T>(request: DialogRequest): Promise<VoidClientResponse>;

    getJson(request: DialogRequest): Promise<JsonClientResponse>;

    postJson(request: DialogRequest): Promise<JsonClientResponse>;

    putJson(request: DialogRequest): Promise<JsonClientResponse>;

    deleteJson(request: DialogRequest): Promise<JsonClientResponse>;

    handleGetBlobResponse(request: DialogRequest, response: Promise<BlobClientResponse>): Promise<BlobClientResponse> | null;

    handleGetTextResponse(request: DialogRequest, response: Promise<TextClientResponse>): Promise<TextClientResponse> | null;

    handleOpenStreamResponse(request: DialogRequest, response: Promise<StreamProducer>): Promise<StreamProducer> | null;

    handlePostMultipartResponse<T>(request: DialogRequest, response: Promise<VoidClientResponse>): Promise<VoidClientResponse> | null;

    handleGetJsonResponse(request: DialogRequest, response: Promise<JsonClientResponse>): Promise<JsonClientResponse> | null;

    handlePostJsonResponse(request: DialogRequest, response: Promise<JsonClientResponse>): Promise<JsonClientResponse> | null;

    handlePutJsonResponse(request: DialogRequest, response: Promise<JsonClientResponse>): Promise<JsonClientResponse> | null;

    handleDeleteJsonResponse(request: DialogRequest, response: Promise<JsonClientResponse>): Promise<JsonClientResponse> | null;

}
