using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Web.Mvc;
using AutomatizovanySklad.Core.Entity;
using Web.Models.Subjekt;

namespace Web.Controllers {
  [Authorize(Roles = "Vedouci")]
  public class SubjektController : BaseController {

    public ActionResult Index() {
      var listSubjektu = databaze.Subjekty.Where(s=>s.JeAktivni).Include(nameof(Kontakt)).Include(nameof(Adresa)).ToList();
      var listSubjektuModel = new SubjektListModel();
      foreach (Subjekt item in listSubjektu) {
        listSubjektuModel.Subjekty.Add(EntitaToSubjekt(item));
      }
      listSubjektuModel.Title = "Seznam subjektů";
      return View(listSubjektuModel);
    }

    public ActionResult Vytvor() {
      var subjektModel = new SubjektModel { };
      subjektModel.Title = "Vytvoř subjekt";
      return View(subjektModel);
    }

    [HttpPost]
    public ActionResult Vytvor(SubjektModel subjektModel) {
      if (ModelState.IsValid) {
        var kontakt = SubjektToEntita(subjektModel).Kontakt;
        databaze.Kontakty.Add(kontakt);
        var subjekt = SubjektToEntita(subjektModel);
        subjekt.JeAktivni = true;
        PridejDatumVytvoreni(subjekt);
        databaze.Subjekty.Add(subjekt);
        databaze.SaveChanges();
        Success("Subjekt byl úspěšně vytvořen.", true);
      }
      return RedirectToAction("Index", "Subjekt");
    }

    public ActionResult Editovat(int id) {
      var subjektZDatabaze = databaze.Subjekty.Include(nameof(Kontakt)).Include(nameof(Adresa)).First(z => z.Id == id);
      var subjektModel = EntitaToSubjekt(subjektZDatabaze);
      subjektModel.Title = "Editovat zaměstnance";
      return View(subjektModel);
    }

    [HttpPost]
    public ActionResult Editovat(SubjektModel subjektModel) {
      if (ModelState.IsValid) {
        databaze.Kontakty.AddOrUpdate(SubjektToEntita(subjektModel).Kontakt);
        databaze.Adresy.AddOrUpdate(SubjektToEntita(subjektModel).Adresa);
        var subjekt = SubjektToEntita(subjektModel);
        subjekt=PridejDatumZmeny(subjekt);
        subjekt.JeAktivni = true;
        databaze.Subjekty.AddOrUpdate(subjekt);
        databaze.SaveChanges();
        Success("Subjekt byl úspěšně editován.", true);
      }
      return RedirectToAction("Index", "Subjekt");
    }

    public ActionResult Detail(int id) {
      var subjektZDatabaze = databaze.Subjekty.Include(nameof(Kontakt)).Include(nameof(Adresa)).First(z => z.Id == id);
      var subjektModel = new SubjektModel();
      subjektModel = EntitaToSubjekt(subjektZDatabaze);
      subjektModel.Title = "Detail zaměstnance";
      return View(subjektModel);
    }

    public ActionResult Deaktivovat(int id) {
      var subjekt = databaze.Subjekty.Include(nameof(Adresa)).Include(nameof(Kontakt)).FirstOrDefault(z => z.Id == id);
      subjekt.JeAktivni = false;
      databaze.Subjekty.AddOrUpdate(subjekt);
      databaze.SaveChanges();
      Success("Subjekt byl úspěšně smazán.", true);
      return RedirectToAction("Index", "Subjekt");
    }
  }
}