import type { IServerMetrics } from '../data/server.js';
import * as plugins from '../plugins.js';

/**
 * This request can be used between any two players
 * Examples:
 * WebApp -> Cloudly (get metrics)
 * Cloudly -> Webapp (send metrics)
 * Cloudly -> Coreflow (get metrics)
 * Coreflow -> Cloudly (send metrics)
 */
export interface IRequest_Any_Cloudly_ServerStatus
extends plugins.typedrequestInterfaces.implementsTR<
  plugins.typedrequestInterfaces.ITypedRequest,
  IRequest_Any_Cloudly_ServerStatus
> {
  method: 'getOrSendServerMetrics',
  request: {
    getOrSend: 'get' | 'send';
    serverMetrics?: IServerMetrics;
  },
  response: {
    serverMetrics?: IServerMetrics;
  },
}

/**
 * this request can be used between any two players
 * Examples:
 * WebApp -> Cloudly
 * Cloudly -> Coreflow
 * Cloudly -> HostingProvider
 */
export interface IRequest_TriggerServerAction
  extends plugins.typedrequestInterfaces.implementsTR<
    plugins.typedrequestInterfaces.ITypedRequest,
    IRequest_TriggerServerAction
  > {
  method: 'triggerServerAction';
  request: {
    actionName: 'reboot' | 'rebuild';
    payload: any;
  };
  response: {
    actionConfirmed: boolean;  
  };
}