using Nancy;
using Nancy.Routing;
using NzbDrone.Common;
using NzbDrone.Api.Extensions;
using System.Linq;

namespace NzbDrone.Api.System
{
    public class SystemModule : NzbDroneApiModule
    {
        private readonly IEnvironmentProvider _environmentProvider;
        private readonly IRouteCacheProvider _routeCacheProvider;

        public SystemModule(IEnvironmentProvider environmentProvider, IRouteCacheProvider routeCacheProvider)
            : base("system")
        {
            _environmentProvider = environmentProvider;
            _routeCacheProvider = routeCacheProvider;
            Get["/status"] = x => GetStatus();
            Get["/routes"] = x => GetRoutes();
        }

        private Response GetStatus()
        {
            return new
                {
                    Version = _environmentProvider.Version,
                    AppData = _environmentProvider.GetAppDataPath(),
                    IsAdmin = _environmentProvider.IsAdmin,
                    IsUserInteractive = _environmentProvider.IsUserInteractive,
                    BuildTime = _environmentProvider.BuildDateTime,
                    StartupPath = _environmentProvider.StartUpPath,
                    OsVersion = _environmentProvider.GetOsVersion(),
                    IsMono = EnvironmentProvider.IsMono,
                    IsProduction = EnvironmentProvider.IsProduction,
                    IsDebug = EnvironmentProvider.IsDebug,
                    IsLinux = EnvironmentProvider.IsLinux,
                }.AsResponse();

        }


        private Response GetRoutes()
        {
            return _routeCacheProvider.GetCache().Values.AsResponse();
        }
    }
}