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

/// MM 심볼 정보
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMaking {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 현재 상태
    #[prost(enumeration="MarketMakingState", tag="2")]
    pub state: i32,
    /// MM 설정
    #[prost(message, optional, tag="3")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
    /// 펀드 코드
    #[prost(string, tag="4")]
    pub fund_code: ::prost::alloc::string::String,
    /// ETF tick size (Price internal representation)
    #[prost(int64, tag="5")]
    pub tick_size: i64,
}
/// MM 엔진 설정 (MmConfig 대응)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingConfiguration {
    /// MM 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// NAV pricing 상세 설정 (pricing = "nav" 일 때 사용)
    #[prost(message, optional, tag="2")]
    pub pricing: ::core::option::Option<MarketMakingPricing>,
    /// Trade Analyzer 설정
    #[prost(message, optional, tag="3")]
    pub trade_analyzer: ::core::option::Option<MarketMakingTradeAnalyzer>,
    /// Momentum 설정 (최근 가격 흐름 → bid/ask 조정)
    #[prost(message, optional, tag="5")]
    pub momentum: ::core::option::Option<MarketMakingMomentum>,
    /// 통합 포지션 관리 설정
    #[prost(message, optional, tag="6")]
    pub exposure_balancer: ::core::option::Option<MarketMakingExposureBalancer>,
    /// 기준가격 대비 bid 조정값 (Price internal representation)
    #[prost(int64, tag="10")]
    pub bid_adjustment: i64,
    /// 기준가격 대비 ask 조정값 (Price internal representation)
    #[prost(int64, tag="11")]
    pub ask_adjustment: i64,
    /// 레벨당 매수 수량
    #[prost(int64, tag="12")]
    pub bid_quantity: i64,
    /// 레벨당 매도 수량
    #[prost(int64, tag="13")]
    pub ask_quantity: i64,
    /// NAV 계산용 bid basis (Price internal representation)
    #[prost(int64, tag="14")]
    pub bid_basis: i64,
    /// NAV 계산용 ask basis (Price internal representation)
    #[prost(int64, tag="15")]
    pub ask_basis: i64,
}
/// NAV pricing 상세 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingPricing {
    /// EtfPricing 전략 (oneof)
    #[prost(oneof="market_making_pricing::Pricing", tags="1, 2, 3, 4")]
    pub pricing: ::core::option::Option<market_making_pricing::Pricing>,
}
/// Nested message and enum types in `MarketMakingPricing`.
pub mod market_making_pricing {
    /// EtfPricing 전략 (oneof)
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Pricing {
        /// PDF 기반 nav 계산 및 헷지 프라이싱
        #[prost(message, tag="1")]
        PlainFollow(super::PlainFollow),
        /// 지수 추종 헷지 프라이싱
        #[prost(message, tag="2")]
        MeanBidAsk(super::MeanBidAsk),
        /// 선물 베이시스 기반 프라이싱
        #[prost(message, tag="3")]
        Nav(super::Nav),
        /// 레버리지 선물 기반 프라이싱
        #[prost(message, tag="4")]
        KrxNav(super::KrxNav),
    }
}
/// EtfPricing::PdfNavHedge
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct PlainFollow {
}
/// EtfPricing::IndexTrackingHedge
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MeanBidAsk {
}
/// EtfPricing::FutureBasis { prev_index }
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Nav {
    /// 이전 지수 (Price internal representation)
    #[prost(message, optional, tag="1")]
    pub etf_pricing: ::core::option::Option<super::common::EtfPricing>,
}
/// EtfPricing::LeverageFuture { prev_index, prev_future }
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct KrxNav {
    /// 이전 지수 (Price internal representation)
    #[prost(int64, tag="1")]
    pub prev_index: i64,
    /// 이전 선물 (Price internal representation)
    #[prost(int64, tag="2")]
    pub prev_future: i64,
}
/// Trade Analyzer 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingTradeAnalyzer {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 분석 윈도우 크기
    #[prost(uint32, tag="2")]
    pub window: u32,
    /// Adverse fill ratio 임계값
    #[prost(double, tag="3")]
    pub ratio_threshold: f64,
    /// Take-fill strength 임계값
    #[prost(double, tag="4")]
    pub strength_threshold: f64,
    /// 최대 decoration 틱 수
    #[prost(int32, tag="5")]
    pub max_deco_tick: i32,
}
/// Momentum 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingMomentum {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 최근 가격 샘플을 유지할 시간 창 (ms)
    #[prost(uint64, tag="2")]
    pub window_ms: u64,
    /// 연속 모멘텀 강도를 정규화할 기준 틱 수
    #[prost(int32, tag="3")]
    pub trigger_ticks: i32,
    /// 정규화된 모멘텀 강도를 bid 추종 틱으로 바꾸는 민감도
    #[prost(double, tag="4")]
    pub follow_sensitivity: f64,
    /// 정규화된 모멘텀 강도를 ask/bid 도망 틱으로 바꾸는 민감도
    #[prost(double, tag="5")]
    pub escape_sensitivity: f64,
    /// bid 추종 최대 틱 수
    #[prost(int32, tag="6")]
    pub max_follow_ticks: i32,
    /// ask/bid 도망 최대 틱 수
    #[prost(int32, tag="7")]
    pub max_escape_ticks: i32,
    /// 인버스 방향으로 해석할지 여부
    #[prost(bool, tag="8")]
    pub is_opposite: bool,
}
/// 통합 포지션 관리 설정 (soft rebalance + hard limit)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingExposureBalancer {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// soft zone: 이 배수부터 soft rebalance 발동
    #[prost(int32, tag="2")]
    pub trigger_multiple: i32,
    /// 단계당 가격 중심 이동 틱 수
    #[prost(int32, tag="3")]
    pub price_skew_ticks: i32,
    /// hard zone: 이 배수에서 같은 방향 수량 0 (구 hard_limit_max 대체)
    #[prost(int32, tag="4")]
    pub limit_multiple: i32,
}
// ============================================================================
// Request/Response Messages
// ============================================================================

/// ListMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMarketMakingRequest {
    /// 페이지 크기 (optional)
    #[prost(uint32, optional, tag="1")]
    pub page_size: ::core::option::Option<u32>,
    /// 페이지 토큰 (optional)
    #[prost(string, optional, tag="2")]
    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMarketMakingResponse {
    /// 등록된 MM 목록
    #[prost(message, repeated, tag="1")]
    pub entries: ::prost::alloc::vec::Vec<MarketMaking>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// GetMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// GetMarketMakingStatus
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMarketMakingStatusRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// StartMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// MM 설정 오버라이드 (optional, 없으면 기본 설정 사용)
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartMarketMakingResponse {
    /// 시작된 MM 상태
    #[prost(enumeration="MarketMakingState", tag="1")]
    pub state: i32,
    /// 메시지
    #[prost(string, tag="2")]
    pub message: ::prost::alloc::string::String,
}
/// StopMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopMarketMakingResponse {
    /// 메시지
    #[prost(string, tag="1")]
    pub message: ::prost::alloc::string::String,
}
/// ResetMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ResetMarketMakingRequest {
    /// ISIN 심볼 (빈 문자열이면 전체 리셋)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ResetMarketMakingResponse {
    /// 리셋된 심볼 수
    #[prost(int32, tag="1")]
    pub reset_count: i32,
    /// 메시지
    #[prost(string, tag="2")]
    pub message: ::prost::alloc::string::String,
}
/// UpdateMarketMakingConfig
/// NOTE: config 내 pricing, fund_code, tick_size, depth 필드는 이 요청으로 변경할 수 없습니다.
/// 해당 필드들은 서버에서 무시됩니다.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateMarketMakingConfigRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 업데이트할 설정 (전체 교체)
    /// pricing, fund_code, tick_size, depth 필드는 read-only이며 무시됩니다.
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
}
/// StreamMarketMakingStatus
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamMarketMakingStatusRequest {
    /// ISIN 심볼 (빈 문자열이면 전체 스트리밍)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// UpdateMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 업데이트할 MM 설정
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
}
/// GetMarketMakingOrderbook / StreamMarketMakingOrderbook
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMarketMakingOrderbookRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// MM 전용 주문장 데이터
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingOrderbookData {
    /// 매수 호가 목록 (string 표현)
    #[prost(string, repeated, tag="1")]
    pub bid_prices: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// 매도 호가 목록 (string 표현)
    #[prost(string, repeated, tag="2")]
    pub ask_prices: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// 매수 수량 목록
    #[prost(int64, repeated, tag="3")]
    pub bid_quantities: ::prost::alloc::vec::Vec<i64>,
    /// 매도 수량 목록
    #[prost(int64, repeated, tag="4")]
    pub ask_quantities: ::prost::alloc::vec::Vec<i64>,
}
// ============================================================================
// MM 엔진 런타임 상태
// ============================================================================

/// Momentum 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MomentumState {
    /// 현재 모멘텀 방향 ("up", "down", "neutral")
    #[prost(string, tag="1")]
    pub direction: ::prost::alloc::string::String,
    /// 현재 bid 가격 조정값 (Price internal representation)
    #[prost(int64, tag="2")]
    pub bid_adjustment: i64,
    /// 현재 ask 가격 조정값 (Price internal representation)
    #[prost(int64, tag="3")]
    pub ask_adjustment: i64,
    /// 원시 틱 변화량 (부호 포함)
    #[prost(double, tag="4")]
    pub raw_ticks: f64,
    /// 정규화 강도 (raw_ticks / trigger_ticks)
    #[prost(double, tag="5")]
    pub normalized_strength: f64,
    /// 실제 적용된 follow 틱
    #[prost(int32, tag="6")]
    pub follow_ticks: i32,
    /// 실제 적용된 escape 틱
    #[prost(int32, tag="7")]
    pub escape_ticks: i32,
    /// 윈도우 내 샘플 수
    #[prost(int32, tag="8")]
    pub sample_count: i32,
}
/// Trade Analyzer 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct TradeAnalyzerState {
    /// 현재 decoration 틱 수
    #[prost(int32, tag="1")]
    pub deco_tick: i32,
    /// 현재 윈도우 내 체결 횟수
    #[prost(int32, tag="2")]
    pub fill_count: i32,
}
/// 순노출 및 재고 균형 런타임 상태 (ExposureGuard + InventoryBalancer 통합)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct ExposureBalancerState {
    /// 현재 순노출 수량
    #[prost(int64, tag="1")]
    pub net_exposure: i64,
    /// 현재 가격 중심 이동 틱 수
    #[prost(int32, tag="2")]
    pub price_shift_ticks: i32,
    /// 현재 bid 수량 스케일 (0.0 ~ 1.0)
    #[prost(double, tag="3")]
    pub bid_scale: f64,
    /// 현재 ask 수량 스케일 (0.0 ~ 1.0)
    #[prost(double, tag="4")]
    pub ask_scale: f64,
}
/// MM 엔진 전체 런타임 상태 스냅샷
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MmEngineRuntimeState {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 상태 스냅샷 타임스탬프 (Unix nanoseconds)
    #[prost(int64, tag="2")]
    pub timestamp: i64,
    /// MM 상태
    #[prost(enumeration="MarketMakingState", tag="3")]
    pub state: i32,
    /// Momentum 상태
    #[prost(message, optional, tag="4")]
    pub momentum: ::core::option::Option<MomentumState>,
    /// Trade Analyzer 상태
    #[prost(message, optional, tag="5")]
    pub trade_analyzer: ::core::option::Option<TradeAnalyzerState>,
    /// 순노출 및 재고 균형 상태 (기존 exposure_guard(6) + inventory_balancer(7) 통합)
    #[prost(message, optional, tag="6")]
    pub exposure_balancer: ::core::option::Option<ExposureBalancerState>,
}
// ============================================================================
// MM 엔진 상태 Request Messages
// ============================================================================

/// StreamMmEngineState
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamMmEngineStateRequest {
    /// ISIN 심볼 (빈 문자열이면 전체 스트리밍)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
// ============================================================================
// Enums
// ============================================================================

/// MM 상태
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum MarketMakingState {
    Unspecified = 0,
    /// 대기
    Idle = 1,
    /// 활성
    Running = 2,
}
impl MarketMakingState {
    /// 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 {
            MarketMakingState::Unspecified => "MARKET_MAKING_STATE_UNSPECIFIED",
            MarketMakingState::Idle => "MARKET_MAKING_STATE_IDLE",
            MarketMakingState::Running => "MARKET_MAKING_STATE_RUNNING",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "MARKET_MAKING_STATE_UNSPECIFIED" => Some(Self::Unspecified),
            "MARKET_MAKING_STATE_IDLE" => Some(Self::Idle),
            "MARKET_MAKING_STATE_RUNNING" => Some(Self::Running),
            _ => None,
        }
    }
}
include!("kdo.v1.mm.tonic.rs");
include!("kdo.v1.mm.serde.rs");
// @@protoc_insertion_point(module)