using System;

namespace builder
{
	public class Library
	{
		public Library()
		{
			PlatformExt = false;
			IsExecutable = false;
			ReleaseBuild = "Release";
		}
		public string Name;			/* Name of binary */
		public string LocalPath;	/* Local path to library build scripts */
		public string ReleaseBuild;	/* Release build name */
		public string Destination;	/* Final relative path */
		public bool PlatformExt;	/* Extra platform extension */
		public string ProjectFile;	/* Project file, NULL for standard */
		public bool IsExecutable;	/* If this is an EXE instead of a DLL */
		//string DebugBuild;		/* Debug build name */
	};

	public class Plugin
	{
		public Plugin(string file)
		{
			Source = file;
		}
		public Plugin (string file, string folder)
		{
			Source = file;
			Folder = folder;
		}
		public string Folder;		/* Source folder relative to scripting (null for default) */
		public string Source;		/* Source file name */
	};

	public abstract class Package
	{
		/**
		 * Must return the root compression point.
		 */
		public abstract void GetCompressBases(ref string path, ref string folder);

		/**
		 * Must return the base package output folder.
		 */
		public abstract string GetBaseFolder();

		/** 
		 * Must return the list of folders to create.
		 */
		public abstract string [] GetFolders();

		/**
		 * Called when file to file copies must be performed
		 */
		public abstract void OnCopyFiles(ABuilder builder);

		/**
		 * Called when dir to dir copies must be performed
		 */
		public abstract void OnCopyFolders(ABuilder builder);

		/**
		 * Called to build libraries
		 */
		public abstract Library [] GetLibraries();

		/**
		 * Called to get package name
		 */
		public abstract string GetPackageName();

		/**
		 * Called to get a plugin list
		 */
		public abstract Plugin [] GetPlugins();
	}
}