using Cryville.Common;
using System.Collections.Generic;
using System.IO;

namespace Cryville.Crtr.Browsing {
	public abstract class ResourceConverter {
		public abstract string[] GetSupportedFormats();
		public abstract IEnumerable<Resource> ConvertFrom(FileInfo file);
	}
	public abstract class Resource {
		protected Resource(string name) {
			Name = StringUtils.EscapeFileName(name);
		}
		public string Name { get; private set; }
		public abstract bool Valid { get; }
		public override string ToString() {
			return string.Format("{0} ({1})", Name, ReflectionHelper.GetSimpleName(GetType()));
		}
	}
	public class ChartResource : Resource {
		public ChartResource(string name, Chart main, ChartMeta meta) : base(name) {
			Main = main; Meta = meta;
		}
		public Chart Main { get; private set; }
		public ChartMeta Meta { get; private set; }
		public override bool Valid { get { return true; } }
	}
	public class CoverResource : Resource {
		public CoverResource(string name, FileInfo src) : base(name) {
			Source = src;
		}
		public FileInfo Source { get; private set; }
		public override bool Valid { get { return Source.Exists; } }
	}
	public class SongResource : Resource {
		public SongResource(string name, FileInfo src) : base(name) {
			Source = src;
		}
		public FileInfo Source { get; private set; }
		public override bool Valid { get { return Source.Exists; } }
	}
}