syntax = "proto3";

package fr24.feed.api.v1;

option optimize_for = SPEED;

import public "fr24/proto/_common.proto";
import public "fr24/proto/_live_feed.proto";
import public "fr24/proto/_health.proto";
import public "fr24/proto/_nearest_flights.proto";
import public "fr24/proto/_live_flight_status.proto";
import public "fr24/proto/_fetch_search_index.proto";
import public "fr24/proto/_follow_flight.proto";
import public "fr24/proto/_top_flights.proto";
import public "fr24/proto/_live_trail.proto";
import public "fr24/proto/_historic_trail.proto";
import public "fr24/proto/_flight_details.proto";
import public "fr24/proto/_playback_flight.proto";

service Feed {
    rpc Echo(Ping) returns (Pong);
    rpc CountDown(_common.Duration) returns (stream _common.Tick);
    rpc LiveFeed(LiveFeedRequest) returns (LiveFeedResponse);
    rpc Playback(PlaybackRequest) returns (PlaybackResponse);
    rpc NearestFlights(NearestFlightsRequest) returns (NearestFlightsResponse);
    rpc LiveFlightsStatus(LiveFlightsStatusRequest) returns (LiveFlightsStatusResponse);
    rpc FetchSearchIndex(FetchSearchIndexRequest) returns (FetchSearchIndexResponse); // WARN: unstable
    rpc FollowFlight(FollowFlightRequest) returns (stream FollowFlightResponse);
    rpc TopFlights(TopFlightsRequest) returns (TopFlightsResponse);
    rpc LiveTrail(LiveTrailRequest) returns (LiveTrailResponse);
    rpc HistoricTrail(HistoricTrailRequest) returns (HistoricTrailResponse); // WARN: unstable
    rpc FlightDetails(FlightDetailsRequest) returns (FlightDetailsResponse);
    rpc PlaybackFlight(PlaybackFlightRequest) returns (PlaybackFlightResponse);
}