///
///
///
///
///
///
///
///
///
///
///
///
///
use crate::{client::Client, error::Error, payload, proto::common::*};

impl Client {
    /// Get active margin calls for the account.
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    pub async fn get_margin_call_list(
        &self,
        ctid_trader_account_id: i64,
    ) -> Result<ProtoOaMarginCallListRes, Error> {
        let req = ProtoOaMarginCallListReq {
            payload_type: Some(payload::OA_MARGIN_CALL_LIST_REQ as i32),
            ctid_trader_account_id,
        };
        self.command(
            payload::OA_MARGIN_CALL_LIST_REQ,
            req,
            payload::OA_MARGIN_CALL_LIST_RES,
        )
        .await
    }

    /// Calculate expected margin for a list of volumes on a symbol.
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    ///
    /// Useful for pre-trade checks before placing an order.
    /// Note: `moneyDigits` in the response specifies the monetary scale factor.
    pub async fn get_expected_margin(
        &self,
        ctid_trader_account_id: i64,
        symbol_id: i64,
        volume: Vec<i64>,
    ) -> Result<ProtoOaExpectedMarginRes, Error> {
        let req = ProtoOaExpectedMarginReq {
            payload_type: Some(payload::OA_EXPECTED_MARGIN_REQ as i32),
            ctid_trader_account_id,
            symbol_id,
            volume,
        };
        self.command(
            payload::OA_EXPECTED_MARGIN_REQ,
            req,
            payload::OA_EXPECTED_MARGIN_RES,
        )
        .await
    }
}

#[cfg(test)]
mod tests {

    #[async_std::test]
    async fn test() {}
}
