// Code generated by protoc-gen-connect-swift. DO NOT EDIT.
//
// Source: protoflow.proto
//

import Connect
import Foundation
import SwiftProtobuf

public protocol Protoflow_ProtoflowServiceClientInterface: Sendable {

    @discardableResult
    func `downloadYouTubeVideo`(request: Protoflow_YouTubeVideo, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<Protoflow_YouTubeVideoResponse>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `downloadYouTubeVideo`(request: Protoflow_YouTubeVideo, headers: Connect.Headers) async -> ResponseMessage<Protoflow_YouTubeVideoResponse>

    @discardableResult
    func `getSessions`(request: Protoflow_GetSessionsRequest, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<Protoflow_GetSessionsResponse>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `getSessions`(request: Protoflow_GetSessionsRequest, headers: Connect.Headers) async -> ResponseMessage<Protoflow_GetSessionsResponse>

    @discardableResult
    func `getSession`(request: Protoflow_GetSessionRequest, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<Protoflow_GetSessionResponse>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `getSession`(request: Protoflow_GetSessionRequest, headers: Connect.Headers) async -> ResponseMessage<Protoflow_GetSessionResponse>

    @discardableResult
    func `deleteSession`(request: Protoflow_DeleteSessionRequest, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<SwiftProtobuf.Google_Protobuf_Empty>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `deleteSession`(request: Protoflow_DeleteSessionRequest, headers: Connect.Headers) async -> ResponseMessage<SwiftProtobuf.Google_Protobuf_Empty>

    @discardableResult
    func `getPrompts`(request: Protoflow_GetPromptsRequest, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<Protoflow_GetPromptsResponse>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `getPrompts`(request: Protoflow_GetPromptsRequest, headers: Connect.Headers) async -> ResponseMessage<Protoflow_GetPromptsResponse>

    @discardableResult
    func `newPrompt`(request: Protoflow_Prompt, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<Protoflow_Prompt>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `newPrompt`(request: Protoflow_Prompt, headers: Connect.Headers) async -> ResponseMessage<Protoflow_Prompt>

    func `uploadContent`(headers: Connect.Headers, onResult: @escaping @Sendable (Connect.StreamResult<Protoflow_ChatResponse>) -> Void) -> any Connect.ServerOnlyStreamInterface<Protoflow_UploadContentRequest>

    @available(iOS 13, *)
    func `uploadContent`(headers: Connect.Headers) -> any Connect.ServerOnlyAsyncStreamInterface<Protoflow_UploadContentRequest, Protoflow_ChatResponse>

    func `infer`(headers: Connect.Headers, onResult: @escaping @Sendable (Connect.StreamResult<Protoflow_InferResponse>) -> Void) -> any Connect.ServerOnlyStreamInterface<Protoflow_InferRequest>

    @available(iOS 13, *)
    func `infer`(headers: Connect.Headers) -> any Connect.ServerOnlyAsyncStreamInterface<Protoflow_InferRequest, Protoflow_InferResponse>

    func `chat`(headers: Connect.Headers, onResult: @escaping @Sendable (Connect.StreamResult<Protoflow_ChatResponse>) -> Void) -> any Connect.ServerOnlyStreamInterface<Protoflow_ChatRequest>

    @available(iOS 13, *)
    func `chat`(headers: Connect.Headers) -> any Connect.ServerOnlyAsyncStreamInterface<Protoflow_ChatRequest, Protoflow_ChatResponse>

    @discardableResult
    func `convertFile`(request: Protoflow_ConvertFileRequest, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<Protoflow_FilePath>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `convertFile`(request: Protoflow_ConvertFileRequest, headers: Connect.Headers) async -> ResponseMessage<Protoflow_FilePath>

    @discardableResult
    func `generateImages`(request: Protoflow_GenerateImagesRequest, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<Protoflow_GenerateImagesResponse>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `generateImages`(request: Protoflow_GenerateImagesRequest, headers: Connect.Headers) async -> ResponseMessage<Protoflow_GenerateImagesResponse>

    @discardableResult
    func `analyzeConversation`(request: Protoflow_AnalyzeConversationRequest, headers: Connect.Headers, completion: @escaping @Sendable (ResponseMessage<Ai_AnalyzeConversationResponse>) -> Void) -> Connect.Cancelable

    @available(iOS 13, *)
    func `analyzeConversation`(request: Protoflow_AnalyzeConversationRequest, headers: Connect.Headers) async -> ResponseMessage<Ai_AnalyzeConversationResponse>
}

/// Concrete implementation of `Protoflow_ProtoflowServiceClientInterface`.
public final class Protoflow_ProtoflowServiceClient: Protoflow_ProtoflowServiceClientInterface, Sendable {
    private let client: Connect.ProtocolClientInterface

    public init(client: Connect.ProtocolClientInterface) {
        self.client = client
    }

    @discardableResult
    public func `downloadYouTubeVideo`(request: Protoflow_YouTubeVideo, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<Protoflow_YouTubeVideoResponse>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/DownloadYouTubeVideo", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `downloadYouTubeVideo`(request: Protoflow_YouTubeVideo, headers: Connect.Headers = [:]) async -> ResponseMessage<Protoflow_YouTubeVideoResponse> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/DownloadYouTubeVideo", request: request, headers: headers)
    }

    @discardableResult
    public func `getSessions`(request: Protoflow_GetSessionsRequest, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<Protoflow_GetSessionsResponse>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/GetSessions", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `getSessions`(request: Protoflow_GetSessionsRequest, headers: Connect.Headers = [:]) async -> ResponseMessage<Protoflow_GetSessionsResponse> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/GetSessions", request: request, headers: headers)
    }

    @discardableResult
    public func `getSession`(request: Protoflow_GetSessionRequest, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<Protoflow_GetSessionResponse>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/GetSession", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `getSession`(request: Protoflow_GetSessionRequest, headers: Connect.Headers = [:]) async -> ResponseMessage<Protoflow_GetSessionResponse> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/GetSession", request: request, headers: headers)
    }

    @discardableResult
    public func `deleteSession`(request: Protoflow_DeleteSessionRequest, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<SwiftProtobuf.Google_Protobuf_Empty>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/DeleteSession", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `deleteSession`(request: Protoflow_DeleteSessionRequest, headers: Connect.Headers = [:]) async -> ResponseMessage<SwiftProtobuf.Google_Protobuf_Empty> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/DeleteSession", request: request, headers: headers)
    }

    @discardableResult
    public func `getPrompts`(request: Protoflow_GetPromptsRequest, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<Protoflow_GetPromptsResponse>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/GetPrompts", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `getPrompts`(request: Protoflow_GetPromptsRequest, headers: Connect.Headers = [:]) async -> ResponseMessage<Protoflow_GetPromptsResponse> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/GetPrompts", request: request, headers: headers)
    }

    @discardableResult
    public func `newPrompt`(request: Protoflow_Prompt, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<Protoflow_Prompt>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/NewPrompt", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `newPrompt`(request: Protoflow_Prompt, headers: Connect.Headers = [:]) async -> ResponseMessage<Protoflow_Prompt> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/NewPrompt", request: request, headers: headers)
    }

    public func `uploadContent`(headers: Connect.Headers = [:], onResult: @escaping @Sendable (Connect.StreamResult<Protoflow_ChatResponse>) -> Void) -> any Connect.ServerOnlyStreamInterface<Protoflow_UploadContentRequest> {
        return self.client.serverOnlyStream(path: "/protoflow.ProtoflowService/UploadContent", headers: headers, onResult: onResult)
    }

    @available(iOS 13, *)
    public func `uploadContent`(headers: Connect.Headers = [:]) -> any Connect.ServerOnlyAsyncStreamInterface<Protoflow_UploadContentRequest, Protoflow_ChatResponse> {
        return self.client.serverOnlyStream(path: "/protoflow.ProtoflowService/UploadContent", headers: headers)
    }

    public func `infer`(headers: Connect.Headers = [:], onResult: @escaping @Sendable (Connect.StreamResult<Protoflow_InferResponse>) -> Void) -> any Connect.ServerOnlyStreamInterface<Protoflow_InferRequest> {
        return self.client.serverOnlyStream(path: "/protoflow.ProtoflowService/Infer", headers: headers, onResult: onResult)
    }

    @available(iOS 13, *)
    public func `infer`(headers: Connect.Headers = [:]) -> any Connect.ServerOnlyAsyncStreamInterface<Protoflow_InferRequest, Protoflow_InferResponse> {
        return self.client.serverOnlyStream(path: "/protoflow.ProtoflowService/Infer", headers: headers)
    }

    public func `chat`(headers: Connect.Headers = [:], onResult: @escaping @Sendable (Connect.StreamResult<Protoflow_ChatResponse>) -> Void) -> any Connect.ServerOnlyStreamInterface<Protoflow_ChatRequest> {
        return self.client.serverOnlyStream(path: "/protoflow.ProtoflowService/Chat", headers: headers, onResult: onResult)
    }

    @available(iOS 13, *)
    public func `chat`(headers: Connect.Headers = [:]) -> any Connect.ServerOnlyAsyncStreamInterface<Protoflow_ChatRequest, Protoflow_ChatResponse> {
        return self.client.serverOnlyStream(path: "/protoflow.ProtoflowService/Chat", headers: headers)
    }

    @discardableResult
    public func `convertFile`(request: Protoflow_ConvertFileRequest, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<Protoflow_FilePath>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/ConvertFile", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `convertFile`(request: Protoflow_ConvertFileRequest, headers: Connect.Headers = [:]) async -> ResponseMessage<Protoflow_FilePath> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/ConvertFile", request: request, headers: headers)
    }

    @discardableResult
    public func `generateImages`(request: Protoflow_GenerateImagesRequest, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<Protoflow_GenerateImagesResponse>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/GenerateImages", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `generateImages`(request: Protoflow_GenerateImagesRequest, headers: Connect.Headers = [:]) async -> ResponseMessage<Protoflow_GenerateImagesResponse> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/GenerateImages", request: request, headers: headers)
    }

    @discardableResult
    public func `analyzeConversation`(request: Protoflow_AnalyzeConversationRequest, headers: Connect.Headers = [:], completion: @escaping @Sendable (ResponseMessage<Ai_AnalyzeConversationResponse>) -> Void) -> Connect.Cancelable {
        return self.client.unary(path: "/protoflow.ProtoflowService/AnalyzeConversation", request: request, headers: headers, completion: completion)
    }

    @available(iOS 13, *)
    public func `analyzeConversation`(request: Protoflow_AnalyzeConversationRequest, headers: Connect.Headers = [:]) async -> ResponseMessage<Ai_AnalyzeConversationResponse> {
        return await self.client.unary(path: "/protoflow.ProtoflowService/AnalyzeConversation", request: request, headers: headers)
    }

    public enum Metadata {
        public enum Methods {
            public static let downloadYouTubeVideo = Connect.MethodSpec(name: "DownloadYouTubeVideo", service: "protoflow.ProtoflowService", type: .unary)
            public static let getSessions = Connect.MethodSpec(name: "GetSessions", service: "protoflow.ProtoflowService", type: .unary)
            public static let getSession = Connect.MethodSpec(name: "GetSession", service: "protoflow.ProtoflowService", type: .unary)
            public static let deleteSession = Connect.MethodSpec(name: "DeleteSession", service: "protoflow.ProtoflowService", type: .unary)
            public static let getPrompts = Connect.MethodSpec(name: "GetPrompts", service: "protoflow.ProtoflowService", type: .unary)
            public static let newPrompt = Connect.MethodSpec(name: "NewPrompt", service: "protoflow.ProtoflowService", type: .unary)
            public static let uploadContent = Connect.MethodSpec(name: "UploadContent", service: "protoflow.ProtoflowService", type: .serverStream)
            public static let infer = Connect.MethodSpec(name: "Infer", service: "protoflow.ProtoflowService", type: .serverStream)
            public static let chat = Connect.MethodSpec(name: "Chat", service: "protoflow.ProtoflowService", type: .serverStream)
            public static let convertFile = Connect.MethodSpec(name: "ConvertFile", service: "protoflow.ProtoflowService", type: .unary)
            public static let generateImages = Connect.MethodSpec(name: "GenerateImages", service: "protoflow.ProtoflowService", type: .unary)
            public static let analyzeConversation = Connect.MethodSpec(name: "AnalyzeConversation", service: "protoflow.ProtoflowService", type: .unary)
        }
    }
}
