Documentation
use crate::{Action, ActionId};
use fission_ir::WidgetNodeId;
use lazy_static::lazy_static;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct VideoPlay {
    pub target: WidgetNodeId,
}

impl Action for VideoPlay {
    fn static_id() -> ActionId {
        *VIDEO_PLAY_ID
    }
}

lazy_static! {
    pub static ref VIDEO_PLAY_ID: ActionId = ActionId::from_name("fission_core::VideoPlay");
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct VideoPause {
    pub target: WidgetNodeId,
}

impl Action for VideoPause {
    fn static_id() -> ActionId {
        *VIDEO_PAUSE_ID
    }
}

lazy_static! {
    pub static ref VIDEO_PAUSE_ID: ActionId = ActionId::from_name("fission_core::VideoPause");
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct VideoStop {
    pub target: WidgetNodeId,
}

impl Action for VideoStop {
    fn static_id() -> ActionId {
        *VIDEO_STOP_ID
    }
}

lazy_static! {
    pub static ref VIDEO_STOP_ID: ActionId = ActionId::from_name("fission_core::VideoStop");
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct VideoSeek {
    pub target: WidgetNodeId,
    pub position_ms: u64,
}

impl Action for VideoSeek {
    fn static_id() -> ActionId {
        *VIDEO_SEEK_ID
    }
}

lazy_static! {
    pub static ref VIDEO_SEEK_ID: ActionId = ActionId::from_name("fission_core::VideoSeek");
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct VideoSetRate {
    pub target: WidgetNodeId,
    pub rate: f32,
}

impl Action for VideoSetRate {
    fn static_id() -> ActionId {
        *VIDEO_SET_RATE_ID
    }
}

lazy_static! {
    pub static ref VIDEO_SET_RATE_ID: ActionId = ActionId::from_name("fission_core::VideoSetRate");
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct VideoSetVolume {
    pub target: WidgetNodeId,
    pub volume: f32,
}

impl Action for VideoSetVolume {
    fn static_id() -> ActionId {
        *VIDEO_SET_VOLUME_ID
    }
}

lazy_static! {
    pub static ref VIDEO_SET_VOLUME_ID: ActionId =
        ActionId::from_name("fission_core::VideoSetVolume");
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct VideoSetMuted {
    pub target: WidgetNodeId,
    pub muted: bool,
}

impl Action for VideoSetMuted {
    fn static_id() -> ActionId {
        *VIDEO_SET_MUTED_ID
    }
}

lazy_static! {
    pub static ref VIDEO_SET_MUTED_ID: ActionId =
        ActionId::from_name("fission_core::VideoSetMuted");
}