// @generated
// This file is @generated by prost-build.
// ============================================================================
// LeadLagV2 Entity
// ============================================================================

/// 선물-ETF 선행 차익거래 설정 (V2 — is_etf_inverse 제거, 스프레드 기반 트리거)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagV2 {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
    /// LeadLagV2 ID
    #[prost(int32, tag="2")]
    pub id: i32,
    /// 전략 이름 (고유)
    #[prost(string, tag="3")]
    pub display_name: ::prost::alloc::string::String,
    /// 선물 ISIN 코드
    #[prost(string, tag="4")]
    pub futures_isin: ::prost::alloc::string::String,
    /// ETF ISIN 코드
    #[prost(string, tag="5")]
    pub etf_isin: ::prost::alloc::string::String,
    /// 선물 펀드코드
    #[prost(string, tag="6")]
    pub futures_fund_code: ::prost::alloc::string::String,
    /// ETF 펀드코드
    #[prost(string, tag="7")]
    pub etf_fund_code: ::prost::alloc::string::String,
    /// 트리거 설정 (V2)
    #[prost(message, optional, tag="8")]
    pub trigger_config: ::core::option::Option<LeadLagV2TriggerConfig>,
    /// 활성화 여부
    #[prost(bool, tag="9")]
    pub is_active: bool,
    /// 생성 시간
    #[prost(message, optional, tag="10")]
    pub create_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
    /// 수정 시간
    #[prost(message, optional, tag="11")]
    pub update_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
}
// ============================================================================
// Trigger Configuration (V2)
// ============================================================================

/// 스프레드 기반 트리거 설정 (V2)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct LeadLagV2TriggerConfig {
    /// 매수 스프레드 임계값 (틱 단위, 매수 트리거 조건)
    #[prost(int64, tag="1")]
    pub buy_adjustment: i64,
    /// 매도 스프레드 임계값 (틱 단위, 매도 트리거 조건)
    #[prost(int64, tag="2")]
    pub sell_adjustment: i64,
    /// 검증 대기시간 (마이크로초) — 트리거 후 스프레드 재확인 대기
    #[prost(uint64, tag="3")]
    pub verify_wait_us: u64,
    /// 재트리거 쿨다운 (밀리초)
    #[prost(uint64, tag="4")]
    pub cooldown_ms: u64,
    /// ETF 매수 포지션 상한
    #[prost(int64, tag="5")]
    pub max_bid_position: i64,
    /// ETF 매도 포지션 상한
    #[prost(int64, tag="6")]
    pub max_ask_position: i64,
    /// ETF 주문 수량
    #[prost(int64, tag="7")]
    pub etf_order_quantity: i64,
    /// 선물 주문 수량 (계약 수)
    #[prost(int64, tag="8")]
    pub futures_order_quantity: i64,
}
// ============================================================================
// Request/Response Messages
// ============================================================================

#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetLeadLagV2Request {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListLeadLagV2sRequest {
    /// 페이지 크기 (optional)
    #[prost(int32, optional, tag="1")]
    pub page_size: ::core::option::Option<i32>,
    /// 페이지 토큰 (optional, for pagination)
    #[prost(string, optional, tag="2")]
    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
    /// 필터링 조건 (optional, AIP-160)
    ///
    /// Available Fields:
    /// * is_active - 활성화 여부
    ///
    /// Examples:
    /// * is_active=true
    #[prost(string, tag="3")]
    pub filter: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListLeadLagV2sResponse {
    /// LeadLagV2 목록
    #[prost(message, repeated, tag="1")]
    pub lead_lag_v2s: ::prost::alloc::vec::Vec<LeadLagV2>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateLeadLagV2Request {
    /// 생성할 LeadLagV2
    #[prost(message, optional, tag="1")]
    pub lead_lag_v2: ::core::option::Option<LeadLagV2>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateLeadLagV2Request {
    /// 수정할 LeadLagV2
    #[prost(message, optional, tag="1")]
    pub lead_lag_v2: ::core::option::Option<LeadLagV2>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteLeadLagV2Request {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SetLeadLagV2ActiveRequest {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
    /// 활성화 여부
    #[prost(bool, tag="2")]
    pub is_active: bool,
}
/// LeadLagV2 전략 시작 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartLeadLagV2Request {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
}
/// LeadLagV2 전략 시작 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartLeadLagV2Response {
    /// 현재 실행 상태
    #[prost(enumeration="LeadLagV2State", tag="1")]
    pub state: i32,
    /// 응답 메시지
    #[prost(string, tag="2")]
    pub message: ::prost::alloc::string::String,
}
/// LeadLagV2 전략 중지 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopLeadLagV2Request {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
}
/// LeadLagV2 전략 중지 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopLeadLagV2Response {
    /// 현재 실행 상태
    #[prost(enumeration="LeadLagV2State", tag="1")]
    pub state: i32,
    /// 응답 메시지
    #[prost(string, tag="2")]
    pub message: ::prost::alloc::string::String,
}
// ============================================================================
// Execution Summary (체결 현황 요약)
// ============================================================================

/// 체결 현황 요약 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetLeadLagV2ExecutionSummaryRequest {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
    /// 조회 시작 날짜 (YYYYMMDD 정수, 포함). 미지정 시 전체 기간
    #[prost(int32, optional, tag="2")]
    pub start_date: ::core::option::Option<i32>,
    /// 조회 종료 날짜 (YYYYMMDD 정수, 포함). 미지정 시 전체 기간
    #[prost(int32, optional, tag="3")]
    pub end_date: ::core::option::Option<i32>,
}
/// 체결 현황 요약 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct LeadLagV2ExecutionSummaryResponse {
    /// 선물 레그 체결 현황
    #[prost(message, optional, tag="1")]
    pub futures: ::core::option::Option<LeadLagV2LegExecutionSummary>,
    /// ETF 레그 체결 현황
    #[prost(message, optional, tag="2")]
    pub etf: ::core::option::Option<LeadLagV2LegExecutionSummary>,
    /// 스프레드 (선물-ETF 체결단가 차이)
    #[prost(double, optional, tag="3")]
    pub spread: ::core::option::Option<f64>,
}
/// 개별 레그 체결 현황
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct LeadLagV2LegExecutionSummary {
    /// 매도 체결수량
    #[prost(int64, tag="1")]
    pub sell_filled_qty: i64,
    /// 매수 체결수량
    #[prost(int64, tag="2")]
    pub buy_filled_qty: i64,
    /// 매도 평균 체결단가
    #[prost(double, optional, tag="3")]
    pub sell_avg_price: ::core::option::Option<f64>,
    /// 매수 평균 체결단가
    #[prost(double, optional, tag="4")]
    pub buy_avg_price: ::core::option::Option<f64>,
    /// 순매매 (매수체결수량 - 매도체결수량)
    #[prost(int64, tag="5")]
    pub net_qty: i64,
}
// ============================================================================
// Streaming Status Messages
// ============================================================================

/// LeadLagV2 현재 상태 단건 조회 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetLeadLagV2StatusRequest {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
}
/// LeadLagV2 실시간 상태 스트리밍 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamLeadLagV2StatusRequest {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
}
/// LeadLagV2 실시간 상태 업데이트 (delta 방식: 변경된 필드만 전송)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagV2StatusUpdate {
    /// 전략 ID
    #[prost(int32, tag="1")]
    pub lead_lag_v2_id: i32,
    /// 서비스 실행 상태 (변경 시에만 전송)
    #[prost(enumeration="LeadLagV2State", optional, tag="2")]
    pub state: ::core::option::Option<i32>,
    /// 현재 선물 포지션 (양수=롱, 음수=숏)
    #[prost(int64, optional, tag="3")]
    pub futures_position: ::core::option::Option<i64>,
    /// 총 트레이드 수
    #[prost(uint64, optional, tag="4")]
    pub total_trades: ::core::option::Option<u64>,
    /// 마지막 선물 mid price
    #[prost(double, optional, tag="5")]
    pub last_futures_price: ::core::option::Option<f64>,
    /// 마지막 시그널 정보 (변경 시에만 전송)
    #[prost(message, optional, tag="6")]
    pub last_signal: ::core::option::Option<LeadLagV2SignalInfo>,
    /// 스프레드 상태 (bid1/ask1 정보)
    #[prost(message, optional, tag="7")]
    pub spread_info: ::core::option::Option<LeadLagV2SpreadInfo>,
    /// 주문 실행 지연시간 (마이크로초)
    #[prost(uint64, optional, tag="8")]
    pub latency_us: ::core::option::Option<u64>,
    /// 타임스탬프 (마이크로초)
    #[prost(uint64, tag="9")]
    pub timestamp_us: u64,
    /// 현재 ETF 포지션 (양수=롱, 음수=숏)
    #[prost(int64, optional, tag="10")]
    pub etf_position: ::core::option::Option<i64>,
}
/// 시그널 상세 정보 (V2 — spread 기반)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagV2SignalInfo {
    /// 시그널 방향 (BID/ASK)
    #[prost(string, tag="1")]
    pub direction: ::prost::alloc::string::String,
    /// 스프레드 값 (틱 단위)
    #[prost(int64, tag="2")]
    pub spread: i64,
    /// 선물 주문 방향 (BID/ASK)
    #[prost(string, tag="3")]
    pub futures_side: ::prost::alloc::string::String,
    /// ETF 주문 방향 (BID/ASK)
    #[prost(string, tag="4")]
    pub etf_side: ::prost::alloc::string::String,
    /// 선물 주문 가격
    #[prost(double, tag="5")]
    pub futures_price: f64,
    /// ETF 주문 가격
    #[prost(double, tag="6")]
    pub etf_price: f64,
    /// 선물 주문 수량
    #[prost(int64, tag="7")]
    pub futures_qty: i64,
    /// ETF 주문 수량
    #[prost(int64, tag="8")]
    pub etf_qty: i64,
    /// ETF FOK 주문 결과 ("FILLED" 또는 "AUTO_CANCELLED")
    #[prost(string, tag="9")]
    pub etf_fok_status: ::prost::alloc::string::String,
}
/// 스프레드 상태 정보 (선물/ETF 호가 정보)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct LeadLagV2SpreadInfo {
    /// ETF 매수 1호가
    #[prost(double, optional, tag="1")]
    pub etf_bid1: ::core::option::Option<f64>,
    /// ETF 매도 1호가
    #[prost(double, optional, tag="2")]
    pub etf_ask1: ::core::option::Option<f64>,
    /// 선물 매수 1호가
    #[prost(double, optional, tag="3")]
    pub futures_bid1: ::core::option::Option<f64>,
    /// 선물 매도 1호가
    #[prost(double, optional, tag="4")]
    pub futures_ask1: ::core::option::Option<f64>,
}
// ============================================================================
// Trade History (DB 영구 저장 체결 기록)
// ============================================================================

/// 체결 기록 (DB에 영구 저장되는 트레이드 레코드, V2)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagV2TradeRecord {
    /// DB ID
    #[prost(int64, tag="1")]
    pub id: i64,
    /// 부모 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="2")]
    pub lead_lag_v2: ::prost::alloc::string::String,
    /// 세션 내 순차 트레이드 번호
    #[prost(int64, tag="3")]
    pub trade_number: i64,
    /// 시그널 방향 (BID/ASK)
    #[prost(string, tag="4")]
    pub direction: ::prost::alloc::string::String,
    /// 스프레드 값 (틱 단위)
    #[prost(int64, tag="5")]
    pub spread: i64,
    /// 선물 주문 방향 (BID/ASK)
    #[prost(string, tag="6")]
    pub futures_side: ::prost::alloc::string::String,
    /// ETF 주문 방향 (BID/ASK)
    #[prost(string, tag="7")]
    pub etf_side: ::prost::alloc::string::String,
    /// 선물 주문 가격
    #[prost(double, tag="8")]
    pub futures_price: f64,
    /// ETF 주문 가격
    #[prost(double, tag="9")]
    pub etf_price: f64,
    /// 선물 주문 수량
    #[prost(int64, tag="10")]
    pub futures_qty: i64,
    /// ETF 주문 수량
    #[prost(int64, tag="11")]
    pub etf_qty: i64,
    /// 체결 후 선물 포지션
    #[prost(int64, tag="12")]
    pub futures_position_after: i64,
    /// 주문 실행 지연시간 (마이크로초)
    #[prost(uint64, tag="13")]
    pub latency_us: u64,
    /// 거래일 (YYYYMMDD)
    #[prost(int32, tag="14")]
    pub date: i32,
    /// 생성 시각
    #[prost(message, optional, tag="15")]
    pub created_at: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
    /// 주문제출시간 (HHMMSSuuuuuu KST)
    #[prost(int64, tag="16")]
    pub send_order_time: i64,
    /// 트리거한 시세의 거래소 시간 (HHMMSSuuuuuu KST)
    #[prost(int64, tag="17")]
    pub trigger_exchange_time: i64,
    /// 선물 체결시간 (HHMMSSuuuuuu KST)
    #[prost(int64, tag="18")]
    pub futures_filled_time: i64,
    /// ETF 체결시간 (HHMMSSuuuuuu KST)
    #[prost(int64, tag="19")]
    pub etf_filled_time: i64,
    /// 트리거 당시 선물 가격 (시그널 발생 시점의 호가)
    #[prost(double, tag="20")]
    pub futures_trigger_price: f64,
    /// 트리거 당시 ETF 가격 (시그널 발생 시점의 호가)
    #[prost(double, tag="21")]
    pub etf_trigger_price: f64,
    /// ETF FOK 주문 결과 ("FILLED" 또는 "AUTO_CANCELLED")
    #[prost(string, tag="22")]
    pub etf_fok_status: ::prost::alloc::string::String,
}
/// 체결 내역 목록 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListLeadLagV2TradesRequest {
    /// 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
    /// 페이지 크기 (기본: 50, 최대: 200)
    #[prost(int32, optional, tag="2")]
    pub page_size: ::core::option::Option<i32>,
    /// 페이지 토큰 (다음 페이지 조회용)
    #[prost(string, optional, tag="3")]
    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
    /// 필터링 조건
    /// Available Fields:
    /// * date - 거래일 (YYYYMMDD), 예: date=20260228
    #[prost(string, tag="4")]
    pub filter: ::prost::alloc::string::String,
    /// 정렬 기준 (기본: send_order_time DESC)
    #[prost(string, tag="5")]
    pub order_by: ::prost::alloc::string::String,
    /// 조회 시작 날짜 (YYYYMMDD 정수, 포함). filter의 date와 별도로 범위 검색용
    #[prost(int32, optional, tag="6")]
    pub start_date: ::core::option::Option<i32>,
    /// 조회 종료 날짜 (YYYYMMDD 정수, 포함)
    #[prost(int32, optional, tag="7")]
    pub end_date: ::core::option::Option<i32>,
}
/// 체결 내역 목록 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListLeadLagV2TradesResponse {
    /// 체결 기록 목록
    #[prost(message, repeated, tag="1")]
    pub trades: ::prost::alloc::vec::Vec<LeadLagV2TradeRecord>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
    /// 전체 건수
    #[prost(int32, tag="3")]
    pub total_count: i32,
}
/// 단일 체결 내역 조회 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetLeadLagV2TradeRequest {
    /// 부모 리소스 이름 (lead_lag_v2s/{id})
    #[prost(string, tag="1")]
    pub lead_lag_v2: ::prost::alloc::string::String,
    /// 체결 기록 ID
    #[prost(int64, tag="2")]
    pub trade_id: i64,
}
/// LeadLagV2 서비스 실행 상태
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum LeadLagV2State {
    Unspecified = 0,
    Idle = 1,
    Monitoring = 2,
    Triggered = 3,
    Error = 4,
}
impl LeadLagV2State {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            LeadLagV2State::Unspecified => "LEAD_LAG_V2_STATE_UNSPECIFIED",
            LeadLagV2State::Idle => "LEAD_LAG_V2_STATE_IDLE",
            LeadLagV2State::Monitoring => "LEAD_LAG_V2_STATE_MONITORING",
            LeadLagV2State::Triggered => "LEAD_LAG_V2_STATE_TRIGGERED",
            LeadLagV2State::Error => "LEAD_LAG_V2_STATE_ERROR",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "LEAD_LAG_V2_STATE_UNSPECIFIED" => Some(Self::Unspecified),
            "LEAD_LAG_V2_STATE_IDLE" => Some(Self::Idle),
            "LEAD_LAG_V2_STATE_MONITORING" => Some(Self::Monitoring),
            "LEAD_LAG_V2_STATE_TRIGGERED" => Some(Self::Triggered),
            "LEAD_LAG_V2_STATE_ERROR" => Some(Self::Error),
            _ => None,
        }
    }
}
include!("kdo.v1.lead_lag_v2.tonic.rs");
include!("kdo.v1.lead_lag_v2.serde.rs");
// @@protoc_insertion_point(module)