use mumu::{
parser::interpreter::Interpreter,
parser::types::{FunctionValue, Value},
};
use std::sync::{Arc, Mutex};
use std::time::{SystemTime, UNIX_EPOCH};
pub fn register_unique_filename(interp: &mut Interpreter) {
let uf_fn = Arc::new(Mutex::new(unique_filename_bridge));
interp.register_dynamic_function("test:unique_filename", uf_fn);
interp.set_variable(
"test:unique_filename",
Value::Function(Box::new(FunctionValue::Named("test:unique_filename".to_string())))
);
}
fn unique_filename_bridge(_interp: &mut Interpreter, args: Vec<Value>) -> Result<Value, String> {
if !args.is_empty() {
return Err(format!("test:unique_filename => expected 0 arguments, got {}", args.len()));
}
let base_epoch_2024: u64 = 1704067200;
let now_secs = SystemTime::now()
.duration_since(UNIX_EPOCH)
.map_err(|_| "SystemTime error: clock before 1970".to_string())?
.as_secs();
let relative_secs = now_secs.saturating_sub(base_epoch_2024);
let rand_10bit = fastrand::u64(0..1024);
let combined_32 = ((relative_secs << 10) | rand_10bit) & 0xFFFF_FFFF;
let id_hex = format!("{:08x}", combined_32);
let final_name = format!("tmp/test_{}", id_hex);
Ok(Value::SingleString(final_name))
}