// GtkSharp.Generation.GenerationInfo.cs - Generation information class.
//
// Author: Mike Kestner <mkestner@ximian.com>
//
// (c) 2003 Ximian Inc.

namespace GtkSharp.Generation {

	using System;
	using System.Collections;
	using System.IO;
	using System.Xml;

	public class GenerationInfo {
		
		string dir;
		string custom_dir;
		string assembly_name;
		StreamWriter sw;

		public GenerationInfo (XmlElement ns)
		{
			string ns_name = ns.GetAttribute ("name");
			char sep = Path.DirectorySeparatorChar;
			dir = ".." + sep + ns_name.ToLower () + sep + "generated";
			custom_dir = ".." + sep + ns_name.ToLower ();
			assembly_name = ns_name.ToLower () + "-sharp";
		}

		public GenerationInfo (string dir, string assembly_name) : this (dir, dir, assembly_name) {}

		public GenerationInfo (string dir, string custom_dir, string assembly_name)
		{
			this.dir = dir;
			this.custom_dir = custom_dir;
			this.assembly_name = assembly_name;
		}

		public string AssemblyName {
			get {
				return assembly_name;
			}
		}

		public string CustomDir {
			get {
				return custom_dir;
			}
		}

		public string Dir {
			get {
				return dir;
			}
		}

		public StreamWriter Writer {
			get {
				return sw;
			}
			set {
				sw = value;
			}
		}

		public StreamWriter OpenStream (string name) 
		{
			char sep = Path.DirectorySeparatorChar;
			if (!Directory.Exists(dir))
				Directory.CreateDirectory(dir);
			string filename = dir + sep + name + ".cs";
			
			FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write);
			StreamWriter sw = new StreamWriter (stream);
			
			sw.WriteLine ("// This file was generated by the Gtk# code generator.");
			sw.WriteLine ("// Any changes made will be lost if regenerated.");
			sw.WriteLine ();

			return sw;
		}
	}
}