package jadx.core.dex.visitors;

import java.io.File;

import jadx.api.ICodeInfo;
import jadx.api.JadxArgs;
import jadx.core.codegen.CodeWriter;
import jadx.core.dex.attributes.AFlag;
import jadx.core.dex.nodes.ClassNode;
import jadx.core.utils.exceptions.JadxRuntimeException;

public class SaveCode {

	private SaveCode() {
	}

	public static void save(File dir, ClassNode cls, ICodeInfo code) {
		if (cls.contains(AFlag.DONT_GENERATE)) {
			return;
		}
		if (code == null) {
			throw new JadxRuntimeException("Code not generated for class " + cls.getFullName());
		}
		if (code == CodeWriter.EMPTY) {
			return;
		}
		CodeWriter clsCode;
		if (code instanceof CodeWriter) {
			clsCode = (CodeWriter) code;
		} else {
			// TODO: move 'save' method from CodeWriter
			clsCode = new CodeWriter(code.getCodeStr());
		}
		String fileName = cls.getClassInfo().getAliasFullPath() + getFileExtension(cls);
		clsCode.save(dir, fileName);
	}

	private static String getFileExtension(ClassNode cls) {
		JadxArgs.OutputFormatEnum outputFormat = cls.root().getArgs().getOutputFormat();
		switch (outputFormat) {
			case JAVA:
				return ".java";

			case JSON:
				return ".json";

			default:
				throw new JadxRuntimeException("Unknown output format: " + outputFormat);
		}
	}
}