use crate::Error;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Clone, Debug, Default)]
pub struct ButtonPressCallback<T> {
    /// The ID of the conversation message associated with the button press.
    pub conversation_message_id: i32,
    /// A unique identifier for this particular event occurrence.
    pub event_id: String,
    /// An object containing additional data sent with the button press.
    /// The structure of this object is defined by the button's payload.
    pub payload: T,
    /// The ID of the conversation (chat) where the button was pressed.
    pub peer_id: i32,
    /// The user ID of the user who pressed the button.
    pub user_id: i32,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct EventAnswer(i8);

impl EventAnswer {
    pub fn get_status(&self) -> crate::Result<i8> {
        let status = self.0;
        match status {
            1 => Ok(status),
            _ => Err(Error::EventAnswerUnkownStatus { status }),
        }
    }
}
