using System.Collections.Generic;
using System.IO;

namespace MusicMetaTagger.UI
{
	public interface IMusicLibraryInterface
	{
		/// <summary>
		///   Gets the track information from a library query.
		/// </summary>
		/// <param name = "libraryQuery">The library query.</param>
		/// <param name = "callback">The callback.</param>
		/// <returns></returns>
		List<TrackQueryStatus> GetTrackQueries(LibraryQuery libraryQuery, IProgressCallback callback);

		/// <summary>
		///   Updates the album art.
		/// </summary>
		/// <param name = "trackQuery">The track query.</param>
		/// <param name = "albumArt">The album art file info.</param>
		/// <param name = "overwrite">if set to <c>true</c> [overwrite].</param>
		/// <returns>True if update was successful, false otherwise</returns>
		bool UpdateAlbumArt(TrackQueryStatus trackQuery, FileInfo albumArt, bool overwrite);

		/// <summary>
		///   Updates the genre.
		/// </summary>
		/// <param name = "trackQuery">The track query.</param>
		/// <param name = "genre">The genre.</param>
		/// <param name = "overwrite">if set to <c>true</c> [overwrite].</param>
		/// <returns>True if update was successful, false otherwise</returns>
		bool UpdateGenre(TrackQueryStatus trackQuery, string genre, bool overwrite);

		/// <summary>
		///   Updates the year.
		/// </summary>
		/// <param name = "trackQuery">The track query.</param>
		/// <param name = "year">The year.</param>
		/// <param name = "overwrite">if set to <c>true</c> [overwrite].</param>
		/// <returns>True if update was successful, false otherwise</returns>
		bool UpdateYear(TrackQueryStatus trackQuery, int year, bool overwrite);

		/// <summary>
		///   Updates the rating.
		/// </summary>
		/// <param name = "trackQuery">The track query.</param>
		/// <param name = "rating">The rating from 0 to 100.</param>
		/// <param name = "overwrite">if set to <c>true</c> overwrite existing value.</param>
		/// <returns>True if update was successful, false otherwise</returns>
		bool UpdateRating(TrackQueryStatus trackQuery, int rating, bool overwrite);

		bool AddComment(TrackQueryStatus trackQuery, string comment);

		/// <summary>
		///   Returns true if the trackQuery represents an Mp3.
		/// </summary>
		/// <returns></returns>
		bool IsMp3(TrackQueryStatus trackQuery);

		/// <summary>
		///   Returns the Mp3 represented by this trackQuery
		/// </summary>
		/// <param name = "trackQuery"></param>
		/// <returns></returns>
		FileInfo GetMp3FileInfo(TrackQueryStatus trackQuery);
	}
}