// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>

namespace Microsoft.Bonsai.SimulatorApi
{
    using Microsoft.Rest;
    using Models;
    using System.Collections;
    using System.Collections.Generic;
    using System.Threading;
    using System.Threading.Tasks;

    /// <summary>
    /// Session operations.
    /// </summary>
    public partial interface ISession
    {
        /// <summary>
        /// Retrieves all of the simulators currently registered with all
        /// simulator gateways within this workspace.
        /// </summary>
        /// <remarks>
        /// The deployment_mode appears in the query string. It can be one of
        /// Unspecified, Testing, or Hosted. If it has a 'neq:' prefix, that
        /// means "not;"
        /// e.g., {.../simulatorSessions?deployment_mode=neq:Hosted} means the
        /// response should not include
        /// simulators that are hosted.
        ///
        /// The session_status can be one of Attachable, Attached, Detaching,
        /// Rejected,
        /// and supports the neq: prefix.
        ///
        /// The collection appears in the query string
        ///
        /// The package appears in the query string
        ///
        /// The filter queries can appear together, like
        /// {.../simulatorSessions?deployment_mode=Hosted&amp;collection=1234-455-33333}
        /// </remarks>
        /// <param name='workspaceName'>
        /// The workspace identifier.
        /// </param>
        /// <param name='deploymentMode'>
        /// A specifier to filter on deployment mode
        /// </param>
        /// <param name='sessionStatus'>
        /// A specifier to filter on session status
        /// </param>
        /// <param name='collection'>
        /// If present, only sessions in this collection
        /// </param>
        /// <param name='package'>
        /// If present, only sessions in this package
        /// </param>
        /// <param name='customHeaders'>
        /// The headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="ProblemDetailsException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="Microsoft.Rest.SerializationException">
        /// Thrown when unable to deserialize the response
        /// </exception>
        /// <exception cref="Microsoft.Rest.ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        Task<HttpOperationResponse<IList<SimulatorSessionSummary>>> ListWithHttpMessagesAsync(string workspaceName, string deploymentMode = default(string), string sessionStatus = default(string), string collection = default(string), string package = default(string), Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
        /// <summary>
        /// Registers a simulator with the Bonsai platform.
        /// </summary>
        /// <param name='workspaceName'>
        /// The workspace identifier.
        /// </param>
        /// <param name='body'>
        /// Information and capabilities about the simulator.
        /// </param>
        /// <param name='customHeaders'>
        /// The headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="ProblemDetailsException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="Microsoft.Rest.SerializationException">
        /// Thrown when unable to deserialize the response
        /// </exception>
        /// <exception cref="Microsoft.Rest.ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        Task<HttpOperationResponse<SimulatorSessionResponse>> CreateWithHttpMessagesAsync(string workspaceName, SimulatorInterface body, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
        /// <summary>
        /// Retrieves a simulator session corresponding to the sessionId
        /// </summary>
        /// <param name='workspaceName'>
        /// The workspace identifier.
        /// </param>
        /// <param name='sessionId'>
        /// The sessionId of the simulator session to fetch
        /// </param>
        /// <param name='customHeaders'>
        /// The headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="ProblemDetailsException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="Microsoft.Rest.SerializationException">
        /// Thrown when unable to deserialize the response
        /// </exception>
        /// <exception cref="Microsoft.Rest.ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        Task<HttpOperationResponse<SimulatorSessionResponse>> GetWithHttpMessagesAsync(string workspaceName, string sessionId, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
        /// <summary>
        /// Deletes the Simulator session
        /// </summary>
        /// <param name='workspaceName'>
        /// The workspace identifier.
        /// </param>
        /// <param name='sessionId'>
        /// The session ID generated during registration
        /// </param>
        /// <param name='customHeaders'>
        /// The headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="ProblemDetailsException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="Microsoft.Rest.ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        Task<HttpOperationResponse> DeleteWithHttpMessagesAsync(string workspaceName, string sessionId, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
        /// <summary>
        /// Gets the most recent action sent to the simulator to process.
        /// </summary>
        /// <param name='workspaceName'>
        /// The workspace identifier.
        /// </param>
        /// <param name='sessionId'>
        /// Unique identification of the simulator.
        /// </param>
        /// <param name='customHeaders'>
        /// The headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="ProblemDetailsException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="Microsoft.Rest.SerializationException">
        /// Thrown when unable to deserialize the response
        /// </exception>
        /// <exception cref="Microsoft.Rest.ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        Task<HttpOperationResponse<EventModel>> GetMostRecentActionWithHttpMessagesAsync(string workspaceName, string sessionId, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
        /// <summary>
        /// Advance the RL agent with the new state of the simulator, and
        /// returns an action computed by our policy.
        /// Simulatorsession is supposed to use the returned action for
        /// stepping inside the sim and thne getting the new state.false
        /// You can send the same state again, as long as you didn't get a
        /// Non-Idle Action back.
        /// </summary>
        /// <param name='workspaceName'>
        /// The workspace identifier.
        /// </param>
        /// <param name='sessionId'>
        /// Unique identifier for the simulator.
        /// </param>
        /// <param name='body'>
        /// The new state of the simulator.
        /// </param>
        /// <param name='customHeaders'>
        /// The headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="ProblemDetailsException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="Microsoft.Rest.SerializationException">
        /// Thrown when unable to deserialize the response
        /// </exception>
        /// <exception cref="Microsoft.Rest.ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        Task<HttpOperationResponse<EventModel>> AdvanceWithHttpMessagesAsync(string workspaceName, string sessionId, SimulatorState body, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
    }
}
