using System;
using System.Linq;
using System.Web.Mvc;
using System.Web.Routing;
using log4net;
using LeafWeb.Core.DAL;
using Umbraco.Web.Mvc;

namespace LeafWeb.WebCms.Controllers
{
	public class BaseController : SurfaceController
	{
		protected readonly DataService DataService = new DataService();

		protected override void Dispose(bool disposing)
		{
			DataService.Dispose();
			base.Dispose(disposing);
		}

		protected override void OnException(ExceptionContext filterContext)
		{
			if (filterContext?.Exception != null)
			{
				var loggerName = LoggerName(filterContext.RouteData);

				LogManager.GetLogger(loggerName).Error(filterContext.Exception);
			}

			base.OnException(filterContext);
		}

		protected string LoggerName(RouteData routeData)
		{
			var controller = RouteData.Values["controller"].ToString();
			var action = RouteData.Values["action"].ToString();
			return $"LeafWeb.WebCms.Controllers.{controller}Controller.{action}";
		}

		// Status messages to pages
		protected enum StatusType
		{
			Info,
			Success,
			Error
		}

		protected void SetStatusMessage(string msg, StatusType statusType = StatusType.Info)
		{
			TempData["StatusMessage"] = msg;
			switch (statusType)
			{
				case StatusType.Success:
					TempData["StatusMessage-Type"] = "alert-success";
					break;
				case StatusType.Error:
					TempData["StatusMessage-Type"] = "alert-error";
					break;
				case StatusType.Info:
					break;
				default:
					throw new ArgumentOutOfRangeException(nameof(statusType), statusType, null);
			}
		}

		protected SelectList GetPhotosynthesisTypeSelectList()
		{
			return new SelectList(DataService.GetPhotosynthesisTypes().ToList(), "Id", "Name");
		}
	}
}