using System;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using EFCore_Kontext;
using Microsoft.AspNetCore.Http;
using Microsoft.Net.Http.Headers;
using DotnetThoughts.AspNetCore;
using EFC_GO;
namespace ITVisions.Controllers
{

 /// <summary>
 /// Beispiel für Cheat Sheet!
 /// </summary>
 public class FlugController : Microsoft.AspNetCore.Mvc.Controller
 {

  private FlugService flugservice;

  public FlugController(FlugService flugservice, WWWingsContext ctx)
  {
   this.flugservice = flugservice;
   this.ctx = ctx;
  }

  // Verwendet Entity Framework Core
  private WWWingsContext ctx;
  public void Dispose() => ctx.Dispose();

  // Standardroute: http://localhost:12345/Flug
  public ActionResult Index()
  {
   ViewBag.GesamtAnzahl = flugservice.CountSync(); // ctx.Flug.Count();
   var flugSet = ctx.Flug.OrderBy(x => x.Datum).Take(20).ToList();
   return View(flugSet); // zeigt /views/flug/index.cshtml
  }

  // Aufruf: http://localhost:12345/Flug/Rom/10/20
  [Route("/flug/{abflugort}/{von:int}/{bis:int}")]
  public ActionResult Index2(string abflugort, int von, int bis)
  {
   var flugSet = ctx.Flug
    .Where(x => x.Abflugort == abflugort)
    .Skip(von).Take(bis - von).ToList();
   return View("Index", flugSet); // zeigt /views/flug/index.cshtml
  }

  // Routingbeispiel
  // Aufruf: http://localhost:12345/Fleuge/Berlin/Rom
  [Route("/flugset/{abflugort}/{zielort}")]
  [Route("/allefluege/{abflugort}/{zielort}")]
  [Route("/ab{abflugort}/nach{zielort}")]
  [Route("/ab/{abflugort}/nach/{zielort}")]
  [Route("/{abflugort}->{zielort}")]
  [Route("/abflugort/{abflugort}")]
  [Route("/zielort/{zielort}")]
  public ActionResult GetFluege(string abflugort = "*", string zielort = "*")
  {
   IQueryable<Flug> flugSet = ctx.Flug;
   if (!String.IsNullOrEmpty(abflugort) && abflugort != "*") flugSet = flugSet.Where(x => x.Abflugort == abflugort);
   if (!String.IsNullOrEmpty(zielort) && zielort != "*") flugSet = flugSet.Where(x => x.Zielort == zielort);

   return View("Index", flugSet.ToList()); // zeigt /views/flug/index.cshtml
  }

  // Standardroute: http://localhost:12345/Flug/Details/123
  public ActionResult Details(int id)
  {
   var flug = ctx.Flug.Find(id); // lädt per PK
   return View(flug); // zeigt /views/flug/details.cshtml
  }

  // Aufruf: http://localhost:12345/Flug/PlaetzeAendern/101/-1
  [Route("/flug/PlaetzeAendern/{FlugNr}/{anzahl}")]
  public ActionResult PlaetzeAendern(string guid, short anzahl)
  {
   var flug = ctx.Flug.FirstOrDefault(x => x.Guid == guid);
   if (flug == null) return View("FlugNichtGefunden");
   flug.FreiePlaetze += anzahl;
   ctx.SaveChanges();
   return RedirectToAction("Index"); // weiter mit Index()
  }

  // Formulareinsendung mit POST
  [HttpPost]
  public ActionResult Neu([FromForm] Flug flug)
  {
   if (ModelState.IsValid)
   {
    ctx.Flug.Add(flug);
    ctx.SaveChanges();
   }
   // weiter mit Home() in Controller Menu
   return RedirectToAction("Menu", "Home");
  }

 }
}