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

/// 자동정정 등록 주문
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AutoAmendOrder {
    /// 주문 ID
    #[prost(uint64, tag="1")]
    pub order_id: u64,
    /// 종목 심볼
    #[prost(string, tag="2")]
    pub symbol: ::prost::alloc::string::String,
    /// 주문 방향
    #[prost(enumeration="super::common::OrderSide", tag="3")]
    pub side: i32,
    /// 현재 주문 가격
    #[prost(string, tag="4")]
    pub price: ::prost::alloc::string::String,
    /// 현재 주문 수량
    #[prost(int64, tag="5")]
    pub quantity: i64,
    /// 미체결 수량
    #[prost(int64, tag="6")]
    pub remaining_quantity: i64,
    /// 자동정정 설정
    #[prost(message, optional, tag="7")]
    pub config: ::core::option::Option<AmendConfig>,
    /// 정정 횟수
    #[prost(uint32, tag="8")]
    pub amend_count: u32,
    /// 마지막 정정 시각 (unix timestamp ms)
    #[prost(int64, tag="9")]
    pub last_amend_time_ms: i64,
    /// 활성화 여부
    #[prost(bool, tag="10")]
    pub is_active: bool,
}
// ============================================================================
// Configuration
// ============================================================================

/// 자동정정 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct AmendConfig {
    /// 장중 정정 설정
    #[prost(message, optional, tag="1")]
    pub regular_session: ::core::option::Option<RegularSessionConfig>,
    /// 동시호가 정정 설정
    #[prost(message, optional, tag="2")]
    pub auction_session: ::core::option::Option<AuctionSessionConfig>,
    /// 자동정정 시작 전 초기 대기 시간 (ms). 주문 등록 후 이 시간 동안은 정정하지 않고 최초 주문 가격을 유지한다 (0 = 즉시 정정 시작).
    #[prost(uint64, tag="3")]
    pub initial_wait_ms: u64,
}
/// 장중 자동정정 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct RegularSessionConfig {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 상대호가 잔량 비율 임계값 (0.0 ~ 1.0)
    /// 매수: 매도1호가잔량 / 매수1호가잔량 < threshold → 매도1호가로 정정
    /// 매도: 매수1호가잔량 / 매도1호가잔량 < threshold → 매수1호가로 정정
    #[prost(double, tag="2")]
    pub opposite_qty_ratio_threshold: f64,
}
/// 동시호가 정정 설정 (예체가 관여 방지)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct AuctionSessionConfig {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 예상체결가 대비 허용 가격 범위 (0.0 ~ 1.0, e.g., 0.01 = ±1%)
    #[prost(double, tag="2")]
    pub price_limit_pct: f64,
    /// 예상체결수량 대비 최대 수량 비율 (0.0 ~ 1.0, e.g., 0.30 = 30%)
    #[prost(double, tag="3")]
    pub quantity_limit_pct: f64,
}
// ============================================================================
// Session Info
// ============================================================================

// ============================================================================
// Service Status
// ============================================================================

/// 서비스 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct ServiceStatus {
    /// 서비스 실행 중 여부
    #[prost(bool, tag="1")]
    pub is_running: bool,
    /// 현재 세션
    #[prost(enumeration="super::common::SessionId", tag="2")]
    pub current_session: i32,
    /// 활성 주문 수
    #[prost(uint32, tag="3")]
    pub active_order_count: u32,
    /// 총 등록 주문 수
    #[prost(uint32, tag="4")]
    pub total_order_count: u32,
}
// ============================================================================
// Events
// ============================================================================

/// 자동정정 이벤트
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AutoAmendEvent {
    #[prost(oneof="auto_amend_event::Event", tags="1, 2, 3, 4, 5")]
    pub event: ::core::option::Option<auto_amend_event::Event>,
}
/// Nested message and enum types in `AutoAmendEvent`.
pub mod auto_amend_event {
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Event {
        #[prost(message, tag="1")]
        Amended(super::AmendedEvent),
        #[prost(message, tag="2")]
        AmendFailed(super::AmendFailedEvent),
        #[prost(message, tag="3")]
        SessionChanged(super::SessionChangedEvent),
        #[prost(message, tag="4")]
        OrderRegistered(super::OrderRegisteredEvent),
        #[prost(message, tag="5")]
        OrderUnregistered(super::OrderUnregisteredEvent),
    }
}
/// 정정 실행 이벤트
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AmendedEvent {
    /// 주문 ID
    #[prost(uint64, tag="1")]
    pub order_id: u64,
    /// 종목 심볼
    #[prost(string, tag="2")]
    pub symbol: ::prost::alloc::string::String,
    /// 정정 액션
    #[prost(enumeration="AmendAction", tag="3")]
    pub action: i32,
    /// 이전 가격
    #[prost(int64, tag="4")]
    pub old_price: i64,
    /// 새 가격
    #[prost(int64, tag="5")]
    pub new_price: i64,
    /// 이전 수량
    #[prost(int64, tag="6")]
    pub old_quantity: i64,
    /// 새 수량
    #[prost(int64, tag="7")]
    pub new_quantity: i64,
    /// 정정 사유
    #[prost(string, tag="8")]
    pub reason: ::prost::alloc::string::String,
}
/// 정정 실패 이벤트
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AmendFailedEvent {
    /// 주문 ID
    #[prost(uint64, tag="1")]
    pub order_id: u64,
    /// 종목 심볼
    #[prost(string, tag="2")]
    pub symbol: ::prost::alloc::string::String,
    /// 실패 사유
    #[prost(string, tag="3")]
    pub reason: ::prost::alloc::string::String,
}
/// 세션 변경 이벤트
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct SessionChangedEvent {
    /// 이전 세션
    #[prost(enumeration="super::common::SessionId", tag="1")]
    pub old_session: i32,
    /// 새 세션
    #[prost(enumeration="super::common::SessionId", tag="2")]
    pub new_session: i32,
}
/// 주문 등록 이벤트
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct OrderRegisteredEvent {
    /// 주문 ID
    #[prost(uint64, tag="1")]
    pub order_id: u64,
    /// 종목 심볼
    #[prost(string, tag="2")]
    pub symbol: ::prost::alloc::string::String,
    /// 주문 방향
    #[prost(enumeration="super::common::OrderSide", tag="3")]
    pub side: i32,
}
/// 주문 해제 이벤트
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct OrderUnregisteredEvent {
    /// 주문 ID
    #[prost(uint64, tag="1")]
    pub order_id: u64,
    /// 해제 사유
    #[prost(string, tag="2")]
    pub reason: ::prost::alloc::string::String,
}
// ============================================================================
// Request/Response Messages
// ============================================================================

#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct GetAutoAmendOrderRequest {
    /// 주문 ID
    #[prost(uint64, tag="1")]
    pub order_id: u64,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListAutoAmendOrdersRequest {
    /// 종목 필터 (optional)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 주문 방향 필터 (optional)
    #[prost(enumeration="super::common::OrderSide", tag="2")]
    pub side: i32,
    /// 활성화된 주문만 (optional, 기본: true)
    #[prost(bool, tag="3")]
    pub active_only: bool,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListAutoAmendOrdersResponse {
    /// 등록된 자동 정적 주문 목록
    #[prost(message, repeated, tag="1")]
    pub orders: ::prost::alloc::vec::Vec<AutoAmendOrder>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct UpdateConfigRequest {
    /// 주문 ID
    #[prost(uint64, tag="1")]
    pub order_id: u64,
    /// 새 설정
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<AmendConfig>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamEventsRequest {
    /// 특정 주문 ID 필터 (optional, 미지정 시 전체)
    #[prost(uint64, repeated, packed="false", tag="1")]
    pub order_ids: ::prost::alloc::vec::Vec<u64>,
}
/// 정정 액션 타입
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum AmendAction {
    Unspecified = 0,
    /// 가격 정정
    ChangePrice = 1,
    /// 수량 정정
    ChangeQuantity = 2,
    /// 가격+수량 정정
    ChangePriceAndQuantity = 3,
}
impl AmendAction {
    /// 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 {
            AmendAction::Unspecified => "AMEND_ACTION_UNSPECIFIED",
            AmendAction::ChangePrice => "AMEND_ACTION_CHANGE_PRICE",
            AmendAction::ChangeQuantity => "AMEND_ACTION_CHANGE_QUANTITY",
            AmendAction::ChangePriceAndQuantity => "AMEND_ACTION_CHANGE_PRICE_AND_QUANTITY",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "AMEND_ACTION_UNSPECIFIED" => Some(Self::Unspecified),
            "AMEND_ACTION_CHANGE_PRICE" => Some(Self::ChangePrice),
            "AMEND_ACTION_CHANGE_QUANTITY" => Some(Self::ChangeQuantity),
            "AMEND_ACTION_CHANGE_PRICE_AND_QUANTITY" => Some(Self::ChangePriceAndQuantity),
            _ => None,
        }
    }
}
include!("kdo.v1.auto_amend.tonic.rs");
include!("kdo.v1.auto_amend.serde.rs");
// @@protoc_insertion_point(module)