package com.kryptnostic.v2.sharing.api;
import java.util.Set;
import java.util.UUID;
import com.kryptnostic.v2.constants.Names;
import com.kryptnostic.v2.sharing.models.RevocationRequest;
import com.kryptnostic.v2.sharing.models.Share;
import com.kryptnostic.v2.sharing.models.SharingRequest;
import com.kryptnostic.v2.sharing.models.VersionedObjectSearchPair;
import com.kryptnostic.v2.storage.models.VersionedObjectKey;
import retrofit.client.Response;
import retrofit.http.Body;
import retrofit.http.DELETE;
import retrofit.http.GET;
import retrofit.http.POST;
import retrofit.http.PUT;
import retrofit.http.Path;
public interface SharingApi {
String ID = Names.ID_FIELD;
String VERSION = Names.VERSION_FIELD;
String OBJECT_ID_PATH = "/id/{" + ID + "}";
String VERSION_PATH = "/{" + VERSION + "}";
String SHARE = "/share";
String OBJECT = "/object";
String REVOKE = "/revoke";
String KEYS = "/keys";
String OBJECT_KEYS = "/objectKeys";
@GET( SHARE + OBJECT )
Iterable<Share> getIncomingShares();
@DELETE( SHARE + OBJECT + OBJECT_ID_PATH + VERSION_PATH )
Response removeIncomingShare( @Path( ID ) UUID objectKey, @Path( VERSION ) long version);
@POST( SHARE + OBJECT )
Response share( @Body SharingRequest request );
@DELETE( SHARE + OBJECT )
Response revokeAccess( @Body RevocationRequest request );
// TODO: Consider creating objects here.
@POST( SHARE + KEYS )
Response addSearchPairs( @Body Set<VersionedObjectSearchPair> versionedObjectSearchPairs );
@DELETE( SHARE + KEYS )
Response removeSearchPairs( @Body Set<VersionedObjectKey> uuids );
// TODO: Once versions exceed values supported by JS ~2^54 we will have problems if ecmascript hasn't caught up by
@PUT( SHARE + KEYS + OBJECT_ID_PATH + VERSION_PATH )
Response addSearchPair( @Path( ID ) UUID objectId, @Path( VERSION ) long version, @Body byte[] objectSearchPair);
@GET( SHARE + KEYS + OBJECT_ID_PATH + VERSION_PATH )
byte[] getSearchPair( @Path( ID ) UUID id, @Path( VERSION ) long version);
}