1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
use serde::{Serialize, Deserialize};
use uuid::Uuid;
use super::chat_type::ChatType;
// #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
// #[serde(untagged)]
// pub enum CommandData {
//     /// Событие отправляется при создание чата
//     ChatCreated(ChatCreatedCommand),
//     /// Событие отправляется при добавление мемберов в чат
//     AddedToChat(AddedToChatCommand),
//     /// Событие отправляется при удалении администратором участников чата
//     DeletedFromChat(DeletedFromChatCommand),
//     /// Событие отправляется при выходе участников из чата
//     LeftFromChat(LeftFromChatCommand),
//     /// Событие отправляется клиентом при взаимодействии со smartapp приложением
//     SmartappEvent(SmartappEventCommand),
//     /// Событие отправляется ботом при взаимодействие с другими ботами
//     InternalBotNotification(InternalBotNotificationCommand),
//     /// Событие отправляется при успешном логине пользователя на CTS
//     CtsLogin(CtsLoginLogoutCommand),
//     /// Событие отправляется при успешном выходе пользователя с CTS
//     CtsLogout(CtsLoginLogoutCommand),
//     /// Текстовая информация события
//     Text(String),
//     /// Кстомная информация события
//     Other(serde_json::Value),
// }
// impl CommandData {
//     pub fn unwrap_other(&self) -> &serde_json::Value {
//         match self {
//             CommandData::Other(other) => other,
//             _ => panic!("Unexpected command data"),
//         }
//     }
// }
/// Событие отправляется при создание чата
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct ChatCreatedCommandData {
    /// uuid чата
    pub group_chat_id: Uuid,
    /// тип чата
    pub chat_type: ChatType,
    /// имя чата
    pub name: String,
    /// huid создателя чата
    pub creator: Uuid,
    
    pub members: Vec<ChatCreatedCommandMembers>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct ChatCreatedCommandMembers {
    /// huid участника  
    pub huid: Uuid,
    /// имя участника
    pub name: Option<String>,
    /// тип участника
    pub user_kind: UserKind,
    /// является/не является админом
    pub admin: bool,
}
/// тип участника
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Copy)]
pub enum UserKind {
    #[serde(rename(serialize = "user", deserialize = "user"))]
    User,
    #[serde(rename(serialize = "cts_user", deserialize = "cts_user"))]
    CtsUser,
    #[serde(rename(serialize = "unregistered", deserialize = "unregistered"))]
    Unregistered,
    #[serde(rename(serialize = "botx", deserialize = "botx"))]
    Botx
}
/// Событие отправляется при добавление мемберов в чат
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct AddedToChatCommandData {
    /// список добавленных мемберов
    pub added_members: Vec<Uuid>,
}
/// Событие отправляется при удалении администратором участников чата
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct DeletedFromChatCommandData {
    /// список идентификаторов удаленных пользователей
    pub deleted_members: Vec<Uuid>,
}
/// Событие отправляется при выходе участников из чата
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct LeftFromChatCommandData {
    /// список идентификаторов покинувших чат пользователей
    pub left_members: Vec<Uuid>,
}
/// Событие отправляется клиентом при взаимодействии со smartapp приложением
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct SmartappEventCommandData {
    /// уникальный идентификатор запроса
    #[serde(rename(serialize = "ref", deserialize = "ref"))] // ref зарезервировано
    pub request_ref: Uuid,
    /// ID смарт аппа
    pub smartapp_id: Uuid,
    /// пользовательские данные
    pub data: serde_json::Value,
    /// опции запроса
    pub opts: serde_json::Value,
    /// версия протокола smartapp <-> bot
    pub smartapp_api_version: u16,
}
/// Событие отправляется ботом при взаимодействие с другими ботами
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct InternalBotNotificationCommandData {
    /// пользовательские данные
    pub data: serde_json::Value,
    /// опции запроса
    pub opts: serde_json::Value,
}
/// Событие отправляется при успешном логине пользователя на CTS
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct CtsLoginCommandData {
    /// huid пользователя
    pub user_huid: Uuid,
    /// id сервера на который был произведен логин или <br/>
    /// id сервера с которого был произведен выход
    pub cts_id: Uuid,
}
/// Событие отправляется при успешном выходе пользователя с CTS
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct CtsLogoutCommandData {
    /// huid пользователя
    pub user_huid: Uuid,
    /// id сервера на который был произведен логин или <br/>
    /// id сервера с которого был произведен выход
    pub cts_id: Uuid,
}