/*
 * OPEN OUTCRY API
 *
 * # Introduction This API is documented in **OpenAPI 3.0 format**.  This API the following operations: * Retrieve a list of available instruments * Retrieve a list of executed trades  # Basics * API calls have to be secured with HTTPS. * All data has to be submitted UTF-8 encoded. * The reply is sent JSON encoded.
 *
 * API version: 1.0.0
 * Generated by: OpenAPI Generator (https://openapi-generator.tech)
 */

package api

import (
	"context"
	"net/http"
)

// AdminAPIRouter defines the required methods for binding the api requests to a responses for the AdminAPI
// The AdminAPIRouter implementation should parse necessary information from the http request,
// pass the data to a AdminAPIServicer to perform the required actions, then write the service results to the http response.
type AdminAPIRouter interface {
	CreateAdminPayment(http.ResponseWriter, *http.Request)
	GetAdminPaymentById(http.ResponseWriter, *http.Request)
	GetAppEntities(http.ResponseWriter, *http.Request)
	GetAppEntity(http.ResponseWriter, *http.Request)
}

// PublicAPIRouter defines the required methods for binding the api requests to a responses for the PublicAPI
// The PublicAPIRouter implementation should parse necessary information from the http request,
// pass the data to a PublicAPIServicer to perform the required actions, then write the service results to the http response.
type PublicAPIRouter interface {
	GetCurrencies(http.ResponseWriter, *http.Request)
	GetFxInstruments(http.ResponseWriter, *http.Request)
	GetInstruments(http.ResponseWriter, *http.Request)
	GetOrderBook(http.ResponseWriter, *http.Request)
}

// UserAPIRouter defines the required methods for binding the api requests to a responses for the UserAPI
// The UserAPIRouter implementation should parse necessary information from the http request,
// pass the data to a UserAPIServicer to perform the required actions, then write the service results to the http response.
type UserAPIRouter interface {
	CreateTrade(http.ResponseWriter, *http.Request)
	DeleteTradeOrderById(http.ResponseWriter, *http.Request)
	GetBookOrders(http.ResponseWriter, *http.Request)
	GetPaymentAccounts(http.ResponseWriter, *http.Request)
	GetTradeById(http.ResponseWriter, *http.Request)
	GetTradeOrderById(http.ResponseWriter, *http.Request)
	GetTradeOrders(http.ResponseWriter, *http.Request)
	GetTrades(http.ResponseWriter, *http.Request)
	GetTradingAccount(http.ResponseWriter, *http.Request)
}

// AdminAPIServicer defines the api actions for the AdminAPI service
// This interface intended to stay up to date with the openapi yaml used to generate it,
// while the service implementation can be ignored with the .openapi-generator-ignore file
// and updated with the logic required for the API.
type AdminAPIServicer interface {
	CreateAdminPayment(context.Context) (ImplResponse, error)
	GetAdminPaymentById(context.Context, string) (ImplResponse, error)
	GetAppEntities(context.Context) (ImplResponse, error)
	GetAppEntity(context.Context, string) (ImplResponse, error)
}

// PublicAPIServicer defines the api actions for the PublicAPI service
// This interface intended to stay up to date with the openapi yaml used to generate it,
// while the service implementation can be ignored with the .openapi-generator-ignore file
// and updated with the logic required for the API.
type PublicAPIServicer interface {
	GetCurrencies(context.Context) (ImplResponse, error)
	GetFxInstruments(context.Context) (ImplResponse, error)
	GetInstruments(context.Context) (ImplResponse, error)
	GetOrderBook(context.Context, string) (ImplResponse, error)
}

// UserAPIServicer defines the api actions for the UserAPI service
// This interface intended to stay up to date with the openapi yaml used to generate it,
// while the service implementation can be ignored with the .openapi-generator-ignore file
// and updated with the logic required for the API.
type UserAPIServicer interface {
	CreateTrade(context.Context, string, CreateTradeRequest) (ImplResponse, error)
	DeleteTradeOrderById(context.Context, string, string) (ImplResponse, error)
	GetBookOrders(context.Context, string) (ImplResponse, error)
	GetPaymentAccounts(context.Context, string) (ImplResponse, error)
	GetTradeById(context.Context, string, string) (ImplResponse, error)
	GetTradeOrderById(context.Context, string, string) (ImplResponse, error)
	GetTradeOrders(context.Context, string) (ImplResponse, error)
	GetTrades(context.Context, string) (ImplResponse, error)
	GetTradingAccount(context.Context, string) (ImplResponse, error)
}
