namespace ServiceCenter.Controllers
{
    #region Using
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Mvc;

    using Data = ServiceCenter.Data.BLT;
    #endregion

    public class DeviceTypeController : Controller
    {
        #region Список
        public ActionResult Index()
        {
            ViewBag.Title = "Типы устройств";

            Data.DataService ds = new Data.DataService();
            List<Data.DeviceType> deviceTypes = ds.GetDeviceTypes().OrderBy(x => x.Value).ToList();

            return View(deviceTypes);
        }
        #endregion

        #region Создание
        public ActionResult Create()
        {
            ViewBag.Title = "Типы устройств - добавление записи";

            return View();
        }

        [HttpPost]
        public ActionResult Create(Data.DeviceType deviceType)
        {
            ViewBag.Title = "Типы устройств - добавление записи";

            if (string.IsNullOrEmpty(deviceType.Value))
            {
                ModelState.AddModelError("", "Наименование не может быть пустым!");
                return View();
            }

            Data.DataService ds = new Data.DataService();

            if (ds.GetDeviceTypes().FirstOrDefault(x => x.Value == deviceType.Value) != null)
            {
                ModelState.AddModelError("", "Такой тип устройства уже есть!");
                return View();
            }

            try
            {
                ds.SaveDeviceType(deviceType);
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", string.Format("При создании записи возникла ошибка:{0}{1}", Environment.NewLine, ex.Message));
                return View();
            }
        }
        #endregion

        #region Редактирование
        public ActionResult Edit(int id)
        {
            ViewBag.Title = "Типы устройств - редактирование записи";

            Data.DataService ds = new Data.DataService();
            Data.DeviceType deviceType = ds.GetDeviceType(id);

            ViewBag.Message = deviceType.Value;

            return View(deviceType);
        }

        [HttpPost]
        public ActionResult Edit(Data.DeviceType deviceType)
        {
            ViewBag.Title = "Типы устройств - редактирование записи";

            Data.DataService ds = new Data.DataService();

            ViewBag.Message = ds.GetDeviceType(deviceType.Id).Value;

            if (string.IsNullOrEmpty(deviceType.Value))
            {
                ModelState.AddModelError("", "Наименование не может быть пустым!");
                return View(deviceType);
            }

            if (ds.GetDeviceTypes().FirstOrDefault(x => x.Id != deviceType.Id && x.Value == deviceType.Value) != null)
            {
                ModelState.AddModelError("", string.Format("Тип устройства '{0}' уже есть!", deviceType.Value));
                return View(deviceType);
            }

            try
            {
                ds.SaveDeviceType(deviceType);
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", string.Format("При редактировании записи возникла ошибка:{0}{1}", Environment.NewLine, ex.Message));
                return View(deviceType);
            }
        }
        #endregion

        #region Удаление
        public ActionResult Delete(int id)
        {
            Data.DataService ds = new Data.DataService();
            Data.DeviceType deviceType = ds.GetDeviceType(id);

            ds.DeleteDeviceType(deviceType);

            return RedirectToAction("Index");
        }
        #endregion

        #region DropDown
        public ActionResult GetDeviceTypeDropDown(int selectedId)
        {
            Data.DataService ds = new Data.DataService();

            ViewData.Model = ds.GetDeviceTypes().OrderBy(x => x.Value).Select(x => new SelectListItem()
            {
                Text = x.Value,
                Value = x.Id.ToString(),
                Selected = x.Id == selectedId
            });

            ViewData.ModelMetadata = new ModelMetadata(ModelMetadataProviders.Current, null, null, typeof(int), "DeviceTypeId")
            {
                NullDisplayText = "выберите тип устройства"
            };

            return View("DropDown");
        }
        #endregion
    }
}
