package kha;

import haxe.io.Bytes;
import haxe.io.Path;
import haxe.Serializer;
import haxe.Unserializer;
import kha.Blob;
import kha.StorageFile;
import sys.io.File;

using StringTools;

class JavaStorageFile extends StorageFile {
	var file: Path;

	public function new(filename: String) {
		this.file = new Path(filename);
		// if (file.dir != null) Directory.CreateDirectory(file.dir);
	}

	override public function read(): Blob {
		try {
			if (file == null)
				return null;
			if (File.getContent(file.toString()) == null)
				return null;
			return Blob.fromBytes(File.getBytes(file.toString()));
		}
		catch (e:Dynamic) {
			return null;
		}
	}

	override public function write(data: Blob): Void {
		var file = File.write(file.toString(), true);
		file.writeBytes(data.toBytes(), 0, data.toBytes().length);
	}
}

class Storage {
	public static function namedFile(name: String): StorageFile {
		name = name.replace("<", "-(");
		name = name.replace(">", ")-");
		name = name.replace(":", "_");
		name = name.replace("|", ")(");
		name = name.replace("?", "(Q)");
		name = name.replace("*", "(+)");
		name = name.replace("\"", "''");
		return new JavaStorageFile(name);
	}

	public static function defaultFile(): StorageFile {
		return namedFile("default.kha");
	}
}