package org.peerbox.testutils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.RandomStringUtils;

public class FileTestUtils {
	
	private static int FOLDER_NUMBER = 0;
	private static int FILE_NUMBER = 0;
	
	public static List<Path> createFolderWithFiles(Path basePath, int numberOfFiles, int numberOfChars) throws IOException {
		List<Path> files = new ArrayList<Path>();
		
		// create folder
		Path folder = createRandomFolder(basePath);
		files.add(folder);
		
		// create files
		List<Path> f = createRandomFiles(folder, numberOfFiles, numberOfChars);
		files.addAll(f);
		
		return files;
	}
	
	public static Path createRandomFolder(Path basePath) throws IOException {
		String folderName = "f"+FOLDER_NUMBER++; 
		Path p = basePath.resolve(folderName);
		Files.createDirectory(p);
		return p;
	}
	
	public static List<Path> createRandomFolders(Path basePath, int numberOfFolders) throws IOException {
		List<Path> folders = new ArrayList<>();
		for(int i = 0; i < numberOfFolders; ++i) {
			Path folder = createRandomFolder(basePath);
			folders.add(folder);
		}
		return folders;
	}
	
	public static Path createRandomFile(Path basePath, int numChars) throws IOException {
		String name = String.format("%s.file", FILE_NUMBER++);
		Path file = basePath.resolve(name);
		String data = createRandomData(numChars);
		org.apache.commons.io.FileUtils.writeStringToFile(file.toFile(), data);
		return file;
	}
	
	public static Path recreateRandomFile(Path file) throws IOException{
		String data = createRandomData(100);
		org.apache.commons.io.FileUtils.writeStringToFile(file.toFile(), data);
		return file;
	}
	
	public static void writeRandomData(Path file, int numChars) throws IOException {
		String data = createRandomData(numChars);
		org.apache.commons.io.FileUtils.writeStringToFile(file.toFile(), data);
	}
	
	public static Path createTestFile(Path basePath, int numChars) throws IOException {
		String name = String.format("%s.txt", "test");
		Path file = basePath.resolve(name);
		String data = "test";
		org.apache.commons.io.FileUtils.writeStringToFile(file.toFile(), data);
		return file;
	}
	
	public static List<Path> createRandomFiles(Path basePath, int numberOfFiles, int numberOfChars) throws IOException {
		List<Path> files = new ArrayList<Path>();
		for(int i = 0; i < numberOfFiles; ++i) {
			Path f = createRandomFile(basePath, numberOfChars);
			files.add(f);
		}
		return files;
	}

	public static String createRandomData(int numChars) {
		return RandomStringUtils.randomAscii(numChars);
	}
}