using System;
using System.Collections.Generic;
using System.Linq;
using EFCore_Kontext;
using Microsoft.AspNetCore.Mvc;

using EFC_GO;


// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860

namespace ASPNET5Web
{
 
 [Route("api/[controller]")]
 public class FlugApiController : Controller
 {

  public WWWingsContext ctx { get; set; }

  public FlugApiController()
  {
   ctx = new WWWingsContext();
  }

  [HttpGet]
  public string Get()
  {
   return "Hallo vom FlugApi-Controller";
  }

  // ohne die Attribute wäre der Standardaufruf http://localhost:12345/FlugApi/get/101
  // Aufruf /api/flugapi/101
  [HttpGet("{id}")]
  public Flug Get(int id)
  {
   return ctx.Flug.Find(id);
  }

  [HttpGet("/[controller]/flug/[action]/{id}")]
  public IActionResult Get2(int id)
  {
   return new ITVisions.Extensions.OKActionResult(ctx.Flug.SingleOrDefault(x => x.FlugNr == id), "Dr. Holger Schwichtenberg");  }
  
  [Route("/FlugApi/Abflugort/{abflugOrt}")]
  //[HttpGet("{abflugOrt}")]
  public IActionResult Get(string abflugOrt)
  {
   // LINQ-Anfrage
   var abfrage = from f in ctx.Flug select f;
   if (!String.IsNullOrEmpty(abflugOrt))
    abfrage = from f in abfrage
              where f.Abflugort == abflugOrt
              select f;
   // Ausführen der LINQ-Abfrage
   List<Flug> ergebnis = abfrage.ToList();
   // Zusammenstellen des HTTP-Antwort
   var result = Ok(ergebnis);
   HttpContext.Response.Headers.Add("X-Autor", "Dr. Holger Schwichtenberg");
   return result;
  }


  //[HttpGet("{abflugOrt:string}")]
  //[Route("/Abflugort/{abflugOrt}/{zielort}")]
  [HttpGet("/fluege/{abflugOrt}/{zielort}")]
  [HttpGet("/[controller]/[action]/{abflugOrt}/{zielort}")]
  public List<Flug> Route(string abflugOrt, string zielOrt)
  {

   var abfrage = from f in ctx.Flug select f;

   if (!String.IsNullOrEmpty(zielOrt))
    abfrage = abfrage.Where(f => f.Abflugort == abflugOrt && f.Zielort == zielOrt);
   else
    abfrage = abfrage.Where(f => f.Abflugort == abflugOrt);

   //if (!String.IsNullOrEmpty(zielOrt)) abfrage = abfrage.Where(f => f.Zielort == zielOrt);

   // Ausführen der Abfrage
   List<Flug> ergebnis = abfrage.ToList();
   return ergebnis;
  }


  [Route("/FlugApi/Route/{abflugOrt}/{zielort}/{Anzahl:int}")]
  [HttpGet("/Abflugort/{abflugOrt}/{zielort}/{Anzahl:int}")]
  public List<Flug> Get(string abflugOrt, string zielOrt, int Anzahl)
  {

   var abfrage = from f in ctx.Flug select f;

   if (!String.IsNullOrEmpty(abflugOrt))
    abfrage = from f in abfrage
              where f.Abflugort == abflugOrt
              select f;

   if (!String.IsNullOrEmpty(zielOrt)) abfrage = abfrage.Where(f => f.Zielort == zielOrt);

   // Ausführen der Abfrage
   List<Flug> ergebnis = abfrage.Take(Anzahl).ToList();
   return ergebnis;
  }
 }
}
