use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::api::models::*;
use super::Attachment;
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(tag = "type", content = "data")]
pub enum CommandEntities {
    #[serde(rename(serialize = "mention", deserialize = "mention"))]
    Mention(Mention),
    #[serde(rename(serialize = "forward", deserialize = "forward"))]
    Forward(Forward),
    #[serde(rename(serialize = "reply", deserialize = "reply"))]
    Reply(Reply),
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct Forward {
    pub group_chat_id: Uuid,
    pub sender_huid: Uuid,
    pub forward_type: ForwardType,
    pub source_chat_name: Option<String>,
    pub source_sync_id: Option<Uuid>,
    pub source_inserted_at: DateTime<Utc>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum ForwardType {
    #[serde(rename(serialize = "chat", deserialize = "chat"))]
    Chat,
    #[serde(rename(serialize = "channel", deserialize = "channel"))]
    Channel,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct Reply {
    pub source_sync_id: Uuid,
    pub sender: Uuid,
    pub body: String,
    pub mentions: Vec<Mention>,
    pub attachment: Attachment,
    pub reply_type: ReplyType,
    pub source_group_chat_id: Option<Uuid>,
    pub source_chat_name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum ReplyType {
    #[serde(rename(serialize = "chat", deserialize = "chat"))]
    Chat,
    #[serde(rename(serialize = "botx", deserialize = "botx"))]
    Botx,
    #[serde(rename(serialize = "group_chat", deserialize = "group_chat"))]
    GroupChat,
    #[serde(rename(serialize = "channel", deserialize = "channel"))]
    Channel,
}