use mlua::{AnyUserData, LuaString, UserData, UserDataMethods};
use yazi_proxy::TasksProxy;
use yazi_scheduler::TaskIn;

use crate::tasks::Task;

#[derive(Clone, Debug)]
pub(crate) struct TaskOpt(pub(crate) yazi_core::tasks::TaskOpt);

impl UserData for TaskOpt {
	fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
		methods.add_function("name", |_, (ud, name): (AnyUserData, LuaString)| {
			ud.borrow_mut::<Self>()?.0.set_title(name.to_string_lossy());
			Ok(ud)
		});
		methods.add_async_method_once("spawn", |_, me, ()| async move {
			Ok(Task(TasksProxy::spawn(me.0).await?))
		});
	}
}
