using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Http;
using Core.Main;
using Core.Helper;
using Core.Main.DataObjects;
using Core.Main.DataObjects.PTMagicData;
using System.Globalization;

namespace Monitor.Pages
{
  public class TransactionsModel : _Internal.BasePageModelSecure
  {
    public TransactionData TransactionData = null;
    public string ValidationMessage = "";

    public void OnGet()
    {
      base.Init();

      BindData();
    }

    private void BindData()
    {
      TransactionData = new TransactionData(PTMagicBasePath);
    }

    public void OnPost()
    {
      base.Init();

      BindData();

      SaveTransaction();
    }

    private void SaveTransaction()
    {
      double transactionAmount = 0;
      DateTimeOffset transactionDateTime = Constants.confMinDate;

      try
      {
        transactionAmount = SystemHelper.TextToDouble(HttpContext.Request.Form["Transaction_Amount"], transactionAmount, "en-US");
        //transactionDateTime = DateTimeOffset.Parse(HttpContext.Request.Form["Transaction_Date"] + " " + HttpContext.Request.Form["Transaction_Time"], CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
        DateTime tmp = DateTime.Parse(HttpContext.Request.Form["Transaction_Date"] + " " + HttpContext.Request.Form["Transaction_Time"], CultureInfo.InvariantCulture, DateTimeStyles.None);

        // Convert local offset time to UTC
        TimeSpan offsetTimeSpan = TimeSpan.Parse(PTMagicConfiguration.GeneralSettings.Application.TimezoneOffset.Replace("+", ""));
        transactionDateTime = new DateTimeOffset(tmp, offsetTimeSpan);
      }
      catch { }

      if (transactionAmount == 0)
      {
        ValidationMessage = "Please enter a valid amount in the format 123.45!";
      }
      else
      {
        if (transactionDateTime == Constants.confMinDate)
        {
          ValidationMessage = "Please select a valid date and time!";
        }
        else
        {
          TransactionData.Transactions.Add(new Transaction() { GUID = Guid.NewGuid().ToString(), Amount = transactionAmount, UTCDateTime = transactionDateTime.UtcDateTime });
          TransactionData.SaveTransactions(PTMagicBasePath);

          NotifyHeadline = "Transaction saved!";
          NotifyMessage = "Transaction saved successfully to _data/Transactions.json.";
          NotifyType = "success";
        }
      }
    }
  }
}