use crate::prelude::*;

use std::{ time };

use notify_rust::{ Notification, Hint};


#[gen_特征_derive(MOD特征_os_notify)]
impl 信令路由{
    async fn exec文本信令_os_notify(&self,函数名:&str, mut 参数数组:Vec<String>)-> anyhow_Result<(bool,Value,Vec<String>)>{
        let 信令路由ref = self;
        let 结果 = match 函数名{
            "notify"=>{
                let 内容 = if 参数数组.len() >= 2{ 参数数组.remove(1) }else{ "空".to_string() };
                let 标题 = if 参数数组.len() >= 1{ 参数数组.remove(0) }else{ "rust默认窗口".to_string() };
                let _ = 信令路由ref.系统_通知(标题,内容);
                json!(true)
            }
            _=>{ return Ok((false, json!(""), 参数数组)); }
        };
        Ok((true, 结果, Vec::new()))
    }

    fn 系统_通知(&self,标题:impl AsRef<str>,内容:impl AsRef<str> )->anyhow_Result<()>{
        系统_通知(标题,内容)
    }
}


#[derive(Clone, Serialize, Deserialize)]//可选特征
enum 信令表{
    test,test1,
}
impl信令特征!(信令表, 执行函数);


async fn 执行函数(信令路由:信令路由,id:信令ID,单个信令:信令表)->anyhow_Result<信令表>{ 
    match 单个信令{
        信令表::test=>{   return Err(anyhow_err!("未实现"));   }
        _ =>{ return Err(anyhow_err!("信令不存在")); }
    }
}




pub fn 系统_通知(标题:impl AsRef<str>,内容:impl AsRef<str> )->anyhow_Result<()>{
    Notification::new()
        .summary(标题.as_ref())
        .body(内容.as_ref())
        .icon("thunderbird")
        .appname("rust")
        .hint(Hint::Category("email".to_owned()))
        .hint(Hint::Resident(true)) // this is not supported by all implementations
        // .timeout(0) // this however is
        .show()?;
    Ok(())
}