using System.Linq;
using System.Web.Mvc;
using Wierszowki.Core.Linq;
using Wierszowki.Models;
using Wierszowki.Services;
using xVal.ServerSide;

namespace Wierszowki.Controllers
{
    public class AuthorController : Controller
    {
        private readonly WierszowkiDataContext _context;

        public AuthorController()
        {
            _context = new WierszowkiDataContext();
        }

        public ActionResult Index()
        {
            var authors = _context.GetAuthors();
            return View(authors);
        }

        [Authorize]
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Create()
        {
            var authorViewData = new AuthorViewData
                                     {
                                         Author = new Author(),
                                         EmploymentTypeList = new SelectList(_context.GetEmploymentTypes().ToList(), "Id", "Name")
                                     };

            return View(authorViewData);
        }

        [Authorize]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(Author author)
        {
            var authorService = new AuthorService();
            try
            {
                authorService.Create(author);
            }
            catch (RulesException ex)
            {
                ex.AddModelStateErrors(ModelState, "author");
            }

            if (ModelState.IsValid)
                return RedirectToAction("Confirm", author);


            var authorViewData = new AuthorViewData
            {
                Author = author,
                EmploymentTypeList = new SelectList(_context.GetEmploymentTypes().ToList(), "Id", "Name")
            };
            return View(authorViewData);
        }


        [Authorize]
        public ActionResult Confirm(Author author)
        {
            return View(author);
        }

        [Authorize]
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Edit(int id)
        {
            var authorViewData = new AuthorViewData
                     {
                         Author = _context.GetAuthorById(id),
                         EmploymentTypeList = new SelectList(_context.GetEmploymentTypes().ToList(), "Id", "Name")
                     };

            return View(authorViewData);
        }

        [Authorize]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(Author author)
        {
            var authorService = new AuthorService();
            try
            {
                authorService.Update(author);
            }
            catch (RulesException ex)
            {
                ex.AddModelStateErrors(ModelState, "author");
            }

            if (ModelState.IsValid)
                return View("Confirm", author);

            var authorViewData = new AuthorViewData
            {
                Author = author,
                EmploymentTypeList = new SelectList(_context.GetEmploymentTypes().ToList(), "Id", "Name")
            };

            return View(authorViewData);
        }
    }
}