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

/// 선물-ETF 선행 차익거래 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLag {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
    /// LeadLag 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,
    /// 트리거 설정
    #[prost(message, optional, tag="8")]
    pub trigger_config: ::core::option::Option<LeadLagTriggerConfig>,
    /// 활성화 여부
    #[prost(bool, tag="9")]
    pub is_active: bool,
    /// 생성 시간
    #[prost(message, optional, tag="12")]
    pub create_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
    /// 수정 시간
    #[prost(message, optional, tag="13")]
    pub update_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
    /// 인버스 ETF 여부 (true: 선물과 같은 방향 헷지, false: 반대 방향 헷지)
    #[prost(bool, tag="14")]
    pub is_etf_inverse: bool,
}
// ============================================================================
// Trigger Configuration
// ============================================================================

/// 선물 급변 감지 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct LeadLagTriggerConfig {
    /// 트리거 틱 수 (선물 가격 변동 임계값, 틱 단위)
    #[prost(int64, tag="1")]
    pub tick_threshold: i64,
    /// 감지 윈도우 (마이크로초)
    #[prost(uint64, tag="2")]
    pub window_us: u64,
    /// 트리거 후 재트리거까지 대기시간 (밀리초)
    #[prost(uint64, tag="3")]
    pub cooldown_ms: u64,
    /// 최대 포지션 (etf 횟수)
    #[prost(int64, tag="4")]
    pub max_bid_position: i64,
    #[prost(int64, tag="5")]
    pub max_ask_position: i64,
    /// 선물 1계약당 ETF 헷지 수량
    #[prost(int64, tag="6")]
    pub etf_hedge_quantity: i64,
    /// 선물 주문 수량 (계약 수)
    #[prost(int64, tag="7")]
    pub futures_order_quantity: i64,
}
// ============================================================================
// Request/Response Messages
// ============================================================================

#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetLeadLagRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListLeadLagsRequest {
    /// 페이지 크기 (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 ListLeadLagsResponse {
    /// LeadLag 목록
    #[prost(message, repeated, tag="1")]
    pub lead_lags: ::prost::alloc::vec::Vec<LeadLag>,
    /// 다음 페이지 토큰
    #[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 CreateLeadLagRequest {
    /// 생성할 LeadLag
    #[prost(message, optional, tag="1")]
    pub lead_lag: ::core::option::Option<LeadLag>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateLeadLagRequest {
    /// 수정할 LeadLag
    #[prost(message, optional, tag="1")]
    pub lead_lag: ::core::option::Option<LeadLag>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteLeadLagRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SetLeadLagActiveRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::prost::alloc::string::String,
    /// 활성화 여부
    #[prost(bool, tag="2")]
    pub is_active: bool,
}
/// LeadLag 전략 시작 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartLeadLagRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::prost::alloc::string::String,
}
/// LeadLag 전략 시작 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartLeadLagResponse {
    /// 현재 실행 상태
    #[prost(enumeration="LeadLagState", tag="1")]
    pub state: i32,
    /// 응답 메시지
    #[prost(string, tag="2")]
    pub message: ::prost::alloc::string::String,
}
/// LeadLag 전략 중지 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopLeadLagRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::prost::alloc::string::String,
}
/// LeadLag 전략 중지 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopLeadLagResponse {
    /// 현재 실행 상태
    #[prost(enumeration="LeadLagState", 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 GetLeadLagExecutionSummaryRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::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 LeadLagExecutionSummaryResponse {
    /// 선물 레그 체결 현황
    #[prost(message, optional, tag="1")]
    pub futures: ::core::option::Option<LeadLagLegExecutionSummary>,
    /// ETF 레그 체결 현황
    #[prost(message, optional, tag="2")]
    pub etf: ::core::option::Option<LeadLagLegExecutionSummary>,
    /// 스프레드 (선물-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 LeadLagLegExecutionSummary {
    /// 매도 체결수량
    #[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
// ============================================================================

/// LeadLag 현재 상태 단건 조회 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetLeadLagStatusRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::prost::alloc::string::String,
}
/// LeadLag 실시간 상태 스트리밍 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamLeadLagStatusRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::prost::alloc::string::String,
}
/// LeadLag 실시간 상태 업데이트 (delta 방식: 변경된 필드만 전송)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagStatusUpdate {
    /// 전략 ID
    #[prost(int32, tag="1")]
    pub lead_lag_id: i32,
    /// 서비스 실행 상태 (변경 시에만 전송)
    #[prost(enumeration="LeadLagState", 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<LeadLagSignalInfo>,
    /// Price buffer 상태
    #[prost(message, optional, tag="7")]
    pub price_buffer: ::core::option::Option<LeadLagPriceBufferInfo>,
    /// 주문 실행 지연시간 (마이크로초)
    #[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>,
}
/// 시그널 상세 정보
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagSignalInfo {
    /// 시그널 방향 (SPIKE/DROP)
    #[prost(string, tag="1")]
    pub direction: ::prost::alloc::string::String,
    /// 틱 변동량
    #[prost(int64, tag="2")]
    pub tick_change: 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,
}
/// Price buffer 상태 정보
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct LeadLagPriceBufferInfo {
    /// 윈도우 내 ask 최저가 (매도 스파이크 감지용)
    #[prost(double, optional, tag="2")]
    pub window_ask_low: ::core::option::Option<f64>,
    /// 윈도우 내 bid 최고가 (매수 드롭 감지용)
    #[prost(double, optional, tag="3")]
    pub window_bid_high: ::core::option::Option<f64>,
}
// ============================================================================
// Trade Context (체결 시각화용 가격 컨텍스트)
// ============================================================================

/// 체결 시점 전후 가격 컨텍스트 조회 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetLeadLagTradeContextRequest {
    /// Trade 리소스 이름. Format: "lead_lags/{lead_lag_id}/trades/{trade_id}"
    /// trigger_time 및 window 는 서버에서 trade 레코드를 조회해 처리한다.
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
}
/// 체결 시점 전후 가격 컨텍스트 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagTradeContext {
    /// 선물 가격 틱 (시간순)
    #[prost(message, repeated, tag="1")]
    pub futures_ticks: ::prost::alloc::vec::Vec<LeadLagPriceTick>,
    /// ETF 가격 틱 (시간순)
    #[prost(message, repeated, tag="2")]
    pub etf_ticks: ::prost::alloc::vec::Vec<LeadLagPriceTick>,
    /// 해당 시그널 정보
    #[prost(message, optional, tag="4")]
    pub signal: ::core::option::Option<LeadLagSignalInfo>,
    /// 트리거 시점 선물 가격
    #[prost(double, tag="5")]
    pub futures_price_at_trigger: f64,
    /// 트리거 시점 ETF 가격
    #[prost(double, tag="6")]
    pub etf_price_at_trigger: f64,
    /// 윈도우 내 선물 가격 변동률 (%)
    #[prost(double, tag="7")]
    pub futures_price_change_pct: f64,
    /// 윈도우 내 ETF 가격 변동률 (%)
    #[prost(double, tag="8")]
    pub etf_price_change_pct: f64,
    /// 트리거 시점 (UTC)
    #[prost(message, optional, tag="9")]
    pub trigger_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
}
/// 가격 틱 데이터 (시각화용)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagPriceTick {
    /// 가격 (체결가 또는 mid price)
    #[prost(double, tag="2")]
    pub price: f64,
    /// 체결 수량 (호가 기반이면 0)
    #[prost(int64, tag="3")]
    pub quantity: i64,
    /// 매수/매도 구분 (BID/ASK, 호가 mid이면 빈 문자열)
    #[prost(string, tag="4")]
    pub side: ::prost::alloc::string::String,
    /// 타임스탬프 (UTC)
    #[prost(message, optional, tag="5")]
    pub time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
}
// ============================================================================
// Trade History (DB 영구 저장 체결 기록)
// ============================================================================

/// 체결 기록 (DB에 영구 저장되는 트레이드 레코드)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LeadLagTradeRecord {
    /// DB ID
    #[prost(int64, tag="1")]
    pub id: i64,
    /// 부모 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="2")]
    pub lead_lag: ::prost::alloc::string::String,
    /// 세션 내 순차 트레이드 번호
    #[prost(int64, tag="3")]
    pub trade_number: i64,
    /// 시그널 방향 (FUTURES_SPIKE / FUTURES_DROP)
    #[prost(string, tag="4")]
    pub direction: ::prost::alloc::string::String,
    /// 틱 변동량
    #[prost(int64, tag="5")]
    pub tick_change: 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="15")]
    pub date: i32,
    /// 생성 시각
    #[prost(message, optional, tag="16")]
    pub created_at: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
    /// 주문제출시간 (HHMMSSuuuuuu KST)
    #[prost(int64, tag="17")]
    pub send_order_time: i64,
    /// 트리거한 선물 시세의 거래소 시간 (HHMMSSuuuuuu KST)
    #[prost(int64, tag="18")]
    pub trigger_exchange_time: i64,
    /// 선물 체결시간 (HHMMSSuuuuuu KST)
    #[prost(int64, tag="19")]
    pub futures_filled_time: i64,
    /// ETF 체결시간 (HHMMSSuuuuuu KST)
    #[prost(int64, tag="20")]
    pub etf_filled_time: i64,
    /// 트리거 당시 선물 가격 (시그널 발생 시점의 호가)
    #[prost(double, tag="21")]
    pub futures_trigger_price: f64,
    /// 트리거 당시 ETF 가격 (시그널 발생 시점의 호가)
    #[prost(double, tag="22")]
    pub etf_trigger_price: f64,
}
/// 체결 내역 목록 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListLeadLagTradesRequest {
    /// 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::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,
    /// 정렬 기준 (기본: trigger_time_us 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 ListLeadLagTradesResponse {
    /// 체결 기록 목록
    #[prost(message, repeated, tag="1")]
    pub trades: ::prost::alloc::vec::Vec<LeadLagTradeRecord>,
    /// 다음 페이지 토큰
    #[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 GetLeadLagTradeRequest {
    /// 부모 리소스 이름 (lead_lags/{id})
    #[prost(string, tag="1")]
    pub lead_lag: ::prost::alloc::string::String,
    /// 체결 기록 ID
    #[prost(int64, tag="2")]
    pub trade_id: i64,
}
/// LeadLag 서비스 실행 상태
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum LeadLagState {
    Unspecified = 0,
    Idle = 1,
    Monitoring = 2,
    Triggered = 3,
    Error = 4,
}
impl LeadLagState {
    /// 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 {
            LeadLagState::Unspecified => "LEAD_LAG_STATE_UNSPECIFIED",
            LeadLagState::Idle => "LEAD_LAG_STATE_IDLE",
            LeadLagState::Monitoring => "LEAD_LAG_STATE_MONITORING",
            LeadLagState::Triggered => "LEAD_LAG_STATE_TRIGGERED",
            LeadLagState::Error => "LEAD_LAG_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_STATE_UNSPECIFIED" => Some(Self::Unspecified),
            "LEAD_LAG_STATE_IDLE" => Some(Self::Idle),
            "LEAD_LAG_STATE_MONITORING" => Some(Self::Monitoring),
            "LEAD_LAG_STATE_TRIGGERED" => Some(Self::Triggered),
            "LEAD_LAG_STATE_ERROR" => Some(Self::Error),
            _ => None,
        }
    }
}
include!("kdo.v1.lead_lag.tonic.rs");
include!("kdo.v1.lead_lag.serde.rs");
// @@protoc_insertion_point(module)