using System;
using System.Collections.Generic;
using MileageTraker.Web.Models;
using MileageTraker.Web.Utility;

namespace MileageTraker.Web.ViewModels.Log
{
	public class LogQueryViewModel
	{
		public int? Year { get; set; }
		public int? Month { get; set; }
		public int? MonthRange { get; set; }
		public MileageLogType? LogType { get; set; }
		public string EmployeeName { get; set; }
		public string VehicleId { get; set; }

		public string YearMonthStart {get
		{
			return string.Format("{0}-{1:00}", Year, Month);
		}}

		public string YearMonthEnd
		{
			get
			{
				var dateTime = new DateTime(Year.Value, Month.Value, 1);
				var time = dateTime.AddMonths(MonthRange.Value - 1);
				return string.Format("{0}-{1:00}", time.Year, time.Month);
			}
		}

		public override string ToString()
		{
			var v = new List<string>();

			if (Year.HasValue && Month.HasValue)
			{
				var str = YearMonthStart;

				if (MonthRange.HasValue && MonthRange > 1)
					str += "to" + YearMonthEnd;

				v.Add(str);
			}

			if (LogType.HasValue)
				v.Add(LogType.Value.GetDisplayShortName());

			if (!string.IsNullOrEmpty(VehicleId))
				v.Add(VehicleId);

			if (!string.IsNullOrEmpty(EmployeeName))
				v.Add(EmployeeName);

			return String.Join("_", v).Replace(' ', '-');
		}

		public bool HasParameters()
		{
			return Year.HasValue ||
			       LogType.HasValue ||
			       !string.IsNullOrEmpty(EmployeeName) ||
			       !string.IsNullOrEmpty(VehicleId);
		}

		public LogQueryViewModel Clone()
		{
			return new LogQueryViewModel
				{
					EmployeeName = EmployeeName,
					LogType = LogType,
					Month = Month,
					MonthRange = MonthRange,
					VehicleId = VehicleId,
					Year = Year
				};
		}

		public LogQueryViewModel CloneSet(string vehicleId = null, string employeeName = null)
		{
			var clone = Clone();
			if (vehicleId != null)
				clone.VehicleId = vehicleId;
			if (employeeName != null)
				clone.EmployeeName = employeeName;
			return clone;
		}
	}
}