use rusk_recovery_tools::state::tar;
use std::env;
use std::fs::File;
use std::io::{Read, Result};
use std::path::PathBuf;
use tempfile::TempDir;
use tracing::error;
pub(crate) fn configure(state_zip: &PathBuf) -> Result<Option<TempDir>> {
let tmpdir = tempfile::tempdir()?;
let state_dir = tmpdir.path().join("state");
let mut f = File::open(state_zip)?;
let mut data = Vec::new();
f.read_to_end(&mut data)?;
let unarchive = tar::unarchive(&data[..], state_dir.as_path());
if let Err(e) = unarchive {
error!("Invalid state input {}", e);
return Err(std::io::Error::new(std::io::ErrorKind::InvalidInput, ""));
}
unsafe { env::set_var("RUSK_STATE_PATH", state_dir.as_os_str()) };
Ok(Some(tmpdir))
}