use hyprland::data::{Animations, Client, Clients, Monitors, Workspace};
use hyprland::event_listener::AsyncEventListener;
use hyprland::keyword::*;
use hyprland::prelude::*;
use hyprland::{async_closure, dispatch::*};
#[tokio::main]
async fn main() -> hyprland::Result<()> {
hyprland::dispatch!(async; Exec, "kitty").await?;
hyprland::bind!(async; SUPER, Key, "i" => ToggleFloating, None).await?;
Dispatch::call_async(DispatchType::MoveCursorToCorner(Corner::TopLeft)).await?;
let border_size = match Keyword::get_async("general:border_size").await?.value {
OptionValue::Int(i) => i,
_ => panic!("border size can only be a int"),
};
println!("{border_size}");
Keyword::set_async("general:border_size", border_size * 2).await?;
let monitors = Monitors::get_async().await?;
let win = Client::get_active_async().await?;
let clients = Clients::get_async().await?;
let work = Workspace::get_active_async().await?;
println!("monitors: {monitors:#?},\nactive window: {win:#?},\nclients {clients:#?}\nworkspace:{work:#?}");
let animations = Animations::get_async().await?;
println!("{animations:#?}");
let mut event_listener = AsyncEventListener::new();
event_listener.add_workspace_change_handler(
async_closure! { move |id| println!("workspace changed to {id:#?}")},
);
event_listener.add_active_window_change_handler(
async_closure! { move |data| println!("window changed to {data:#?}")},
);
event_listener.start_listener_async().await
}