using System;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using NzbDrone.Common;
using NzbDrone.Core.Jobs;
using NzbDrone.Core.Providers;
using NzbDrone.Web.Models;

namespace NzbDrone.Web.Controllers
{
    public class UpdateController : Controller
    {
        private readonly UpdateProvider _updateProvider;
        private readonly JobProvider _jobProvider;
        private readonly EnviromentProvider _enviromentProvider;
        private readonly DiskProvider _diskProvider;

        public UpdateController(UpdateProvider updateProvider, JobProvider jobProvider,
            EnviromentProvider enviromentProvider, DiskProvider diskProvider)
        {
            _updateProvider = updateProvider;
            _jobProvider = jobProvider;
            _enviromentProvider = enviromentProvider;
            _diskProvider = diskProvider;
        }

        public ActionResult Index()
        {
            var updateModel = new UpdateModel();
            updateModel.UpdatePackage = _updateProvider.GetAvilableUpdate(_enviromentProvider.Version);
            updateModel.LogFiles = _updateProvider.UpdateLogFile();
            updateModel.LogFolder = _enviromentProvider.GetUpdateLogFolder();

            return View(updateModel);
        }

        public ActionResult StartUpdate()
        {
            _jobProvider.QueueJob(typeof(AppUpdateJob), 0, 0);

            return JsonNotificationResult.Info("Update will begin shortly", "NzbDrone will restart automatically.");
        }

        public ActionResult ViewLog( string filepath)
        {
            ViewBag.Log = _diskProvider.ReadAllText(filepath).Replace(Environment.NewLine, "<br/>");
            return View();
        }
    }
}