use serial_test::serial;
use std::env;
use std::fs;
use sticks::create_dir;

#[test]
#[serial]
fn test_create_dir_success() {
	let temp_dir = env::temp_dir().join(format!(
		"sticks_test_{}_{}",
		std::process::id(),
		std::time::SystemTime::now()
			.duration_since(std::time::UNIX_EPOCH)
			.unwrap()
			.as_nanos()
	));
	let test_dir_name = "test_project";
	let original_dir = env::current_dir().unwrap();

	fs::remove_dir_all(&temp_dir).ok();
	fs::create_dir_all(&temp_dir).unwrap();
	env::set_current_dir(&temp_dir).unwrap();

	let result = create_dir(test_dir_name);
	assert!(result.is_ok());

	let created_path = temp_dir.join(test_dir_name);
	assert!(created_path.exists());

	env::set_current_dir(&original_dir).unwrap();
	fs::remove_dir_all(&temp_dir).ok();
}

#[test]
#[serial]
fn test_create_dir_already_exists() {
	let temp_dir = env::temp_dir().join(format!(
		"sticks_test_exists_{}_{}",
		std::process::id(),
		std::time::SystemTime::now()
			.duration_since(std::time::UNIX_EPOCH)
			.unwrap()
			.as_nanos()
	));
	let test_dir_name = "existing_project";
	let original_dir = env::current_dir().unwrap();

	fs::remove_dir_all(&temp_dir).ok();
	fs::create_dir_all(&temp_dir).unwrap();
	env::set_current_dir(&temp_dir).unwrap();
	fs::create_dir(test_dir_name).unwrap();

	let result = create_dir(test_dir_name);
	assert!(result.is_err());
	assert!(result.unwrap_err().to_string().contains("already exists"));

	env::set_current_dir(&original_dir).unwrap();
	fs::remove_dir_all(&temp_dir).ok();
}
