import { JsPbMessage, OperationResponse } from '../shared';

export interface Report {
	/**
	 * Generates a system report located in `/tmp/steamXXXXXX` (located in
	 * https://steamloopback.host/systemreports).
	 */
	GenerateSystemReport(): Promise<SystemReportReply>;

	/**
	 * Saves a report in the Desktop directory.
	 * @param reportId The report ID (file name) to save.
	 */
	SaveToDesktop(reportId: string): Promise<OperationResponse>;

	/**
	 * @param reportId The report ID (file name) to submit.
	 * @todo times out ({@link Result.Timeout})
	 */
	Submit(reportId: string): Promise<OperationResponse>;
}

export interface SystemReportReply extends OperationResponse {
	/**
	 * If deserialized, returns {@link CMsgGenerateSystemReportReply}.
	 *
	 * Optional, since {@link Report.GenerateSystemReport} throws without this.
	 */
	reply?: ArrayBuffer;
}

export interface CMsgGenerateSystemReportReply extends JsPbMessage {
	/**
	 * The report file name.
	 */
	report_id(): string | undefined;

	set_report_id(param0: any): any;
}
