import * as plugins from '../plugins.js';
import * as userInterfaces from '../data/user.js';

import type { IImage } from '../data/index.js';

export interface IRequest_GetAllImages extends plugins.typedrequestInterfaces.implementsTR<
  plugins.typedrequestInterfaces.ITypedRequest,
  IRequest_GetAllImages
> {
  method: 'getAllImages';
  request: {
    identity: userInterfaces.IIdentity;
  };
  response: {
    images: IImage[];
  };
}

/**
 * gets a single image
 * authentication can happen via imageClaim or identity
 */
export interface IRequest_GetImage extends plugins.typedrequestInterfaces.implementsTR<
  plugins.typedrequestInterfaces.ITypedRequest,
  IRequest_GetImage
> {
  method: 'getImage';
  request: {
    identity: userInterfaces.IIdentity;
    imageId: string;
  };
  response: {
    image: IImage;
  };
}

export interface IRequest_CreateImage extends plugins.typedrequestInterfaces.implementsTR<
  plugins.typedrequestInterfaces.ITypedRequest,
  IRequest_CreateImage
> {
  method: 'createImage';
  request: {
    identity: userInterfaces.IIdentity;
    name: string;
    description: string;
  };
  response: {
    image: IImage;
  };

}

export interface IRequest_PushImageVersion extends plugins.typedrequestInterfaces.implementsTR<
  plugins.typedrequestInterfaces.ITypedRequest,
  IRequest_PushImageVersion
> {
  method: 'pushImageVersion';
  request: {
    identity: userInterfaces.IIdentity;
    imageId: string;
    versionString: string;
    imageStream: plugins.typedrequestInterfaces.IVirtualStream;
  };
  response: {
    allowed: boolean;
  };
}

export interface IRequest_PullImageVersion extends plugins.typedrequestInterfaces.implementsTR<
  plugins.typedrequestInterfaces.ITypedRequest,
  IRequest_PullImageVersion
> {
  method: 'pullImageVersion';
  request: {
    identity: userInterfaces.IIdentity;
    imageId: string;
    versionString: string;
  };
  response: {
    imageStream: plugins.typedrequestInterfaces.IVirtualStream;
  };
}

export interface IRequest_DeleteImage extends plugins.typedrequestInterfaces.implementsTR<
  plugins.typedrequestInterfaces.ITypedRequest,
  IRequest_DeleteImage
> {
  method: 'deleteImage';
  request: {
    identity: userInterfaces.IIdentity;
    imageId: string;
  };
  response: {
  };
}