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

namespace ASPNETCore_NETCore.Pages.RazorPages
{
 // geht erst ab V2.1 für alle Properties der Klasse: [BindProperty]
 public class FlugsucheZerteiltModel : PageModel
 {
  public string Meldung { get; set; }

  WWWingsContext ctx;
  public FlugsucheZerteiltModel(WWWingsContext ctx) // ctx per DI!
  {
   this.ctx = ctx;
  }

  /// <summary>
  /// ~PageLoad() | Get-Action
  /// </summary>
  public void OnGet()
  {
   this.Meldung += "OnGet<br>";
   if (Int32.TryParse(this.Request.Query["jahr"], out int jahr))
   {
    this.Meldung += "Suchergebnisse für Jahr: " + jahr + "<br>";
    this.Jahr = jahr;
    this.Flug = null;
   }
  }

  [BindProperty]
  public string SucheingabeNummer { get; set; } = "280";
  [BindProperty]
  public string SucheingabeOrt { get; set; } = "Berlin";
  [BindProperty]
  public Flug Flug { get; set; }
  [BindProperty]
  public string Ort { get; set; }
  [BindProperty]
  public int Jahr { get; set; }
  [TempData]
  public int FlugNr { get; set; }

  /// <summary>
  /// Page Handler "Flugnummer"
  /// </summary>
  public IActionResult OnPostFlugnummer()
  {

   if (Int32.TryParse(this.SucheingabeNummer, out int flugnummer))
   {
    this.FlugNr = flugnummer;
    this.Flug = ctx.Flug.SingleOrDefault(x => x.FlugNr == flugnummer);
    this.Meldung += "Suchergebnisse für Flugnummer #" + flugnummer + "<br>";
   }
   else
   {
    this.Meldung += "Ungültige Flugnummer: " + this.SucheingabeNummer + "<br>";
    this.Flug = null;
   }
   return Page();
  }


  /// <summary>
  /// Page Handler "Ort"
  /// </summary>
  /// <returns></returns>
  public IActionResult OnPostOrt()
  {
   this.Meldung += "Suchergebnisse für Ort: " + this.SucheingabeOrt + "<br>";
   this.Ort = this.SucheingabeOrt;
   this.Flug = null;
   return Page();
  }


  public IActionResult OnPostFlugdetails()
  {

   return RedirectToPage("/RazorPages/Flug");
  }

   //public async Task OnGetAsync()
   //{
   // this.Meldung += "OnGetAsync<br>";
   //}
   //public async Task<IActionResult> OnPostAsync()
   //{
   // this.Meldung += "OnPostAsync: " + this.Name + "<br>";
   // await Task.Delay(1);
   // return Page();
   //}
  }
}