use crate::{KondutoClient, KondutoResult, OrderStatus, UpdateStatusResponse};

impl KondutoClient {
    /// Atualiza o status de um pedido
    ///
    /// # Argumentos
    ///
    /// * `order_id` - ID do pedido
    /// * `status` - Novo status do pedido
    ///
    /// # Exemplo
    ///
    /// ```no_run
    /// use konduto::{KondutoClient, OrderStatus};
    ///
    /// #[tokio::main]
    /// async fn main() -> Result<(), Box<dyn std::error::Error>> {
    ///     use konduto::OrderId;
    ///     let client = KondutoClient::new()?;
    ///     let response = client.update_order_status("ORDER123", OrderStatus::Approved).await?;
    ///     println!("Status atualizado: {:?}", response.status);
    ///
    ///     Ok(())
    /// }
    /// ```
    pub async fn update_order_status(
        &self,
        order_id: &str,
        status: OrderStatus,
    ) -> KondutoResult<UpdateStatusResponse> {
        let endpoint = format!("/orders/{}", order_id);

        #[derive(serde::Serialize)]
        struct StatusUpdate {
            status: OrderStatus,
        }

        let body = StatusUpdate { status };
        self.put(&endpoint, &body).await
    }
}
