using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ApplicationServices;
using AudibleUtilities;
using CommandLine;

namespace LibationCli
{
	[Verb("export", HelpText = "Must include path and flag for export file type: --xlsx , --csv , --json]")]
	public class ExportOptions : OptionsBase
	{
		[Option(shortName: 'p', longName: "path", Required = true, HelpText = "Path to save file to.")]
		public string FilePath { get; set; }

		#region explanation of mutually exclusive options
		/*
		giving these SetName values makes them mutually exclusive. they are in different sets. eg:
		class Options
		{
		    [Option("username", SetName = "auth")]
		    public string Username { get; set; }
		    [Option("password", SetName = "auth")]
		    public string Password { get; set; }

		    [Option("guestaccess", SetName = "guest")]
		    public bool GuestAccess { get; set; }
		}
		*/
		#endregion
		[Option(shortName: 'x', longName: "xlsx", SetName = "xlsx", Required = true)]
		public bool xlsx { get; set; }

		[Option(shortName: 'c', longName: "csv", SetName = "csv", Required = true)]
		public bool csv { get; set; }

		[Option(shortName: 'j', longName: "json", SetName = "json", Required = true)]
		public bool json { get; set; }

		protected override Task ProcessAsync()
		{
			if (xlsx)
				LibraryExporter.ToXlsx(FilePath);
			if (csv)
				LibraryExporter.ToCsv(FilePath);
			if (json)
				LibraryExporter.ToJson(FilePath);

			Console.WriteLine($"Library exported to: {FilePath}");

			return Task.CompletedTask;
		}
	}
}
