using System;
using TaxProEInvoice.API;

namespace TaxProEinvoiceApiIntigrationDemo.NET
{
    class TPSession : eInvoiceSession
    {
		
		public int TaxPayerID { get; set; }
		public string TaxPayerName { get; set; }        //Optional if you want Name in Session

		public TPSession(int TPID, int SelIrp) : base(true, false, SelIrp)
		{
			TaxPayerID = TPID;
			LoadEInvLoginDetail(TaxPayerID, SelIrp);
			RefreshAuthTokenCompleted += SaveNewAuthToken;
			SelIrpChanged += SelectedIPRChanged;


		}

		private void SelectedIPRChanged(object sender, SelIrpChangedEventArg e)
		{
			//Load LoginDetails for e.SelIrp  in eInvSession.
			LoadEInvLoginDetail(TaxPayerID,e.SelIrp);

		}

		private async void LoadEInvLoginDetail(int id, int SelIrp)
		{
			//Fetch EwbApiLoginDetails from Database
			//DBContext dB = new DBContext();
		 //   einvlogindetail einvlogindetail = new einvlogindetail();
			//einvlogindetail = await dB.eInvLoginDetail.Where(x => x.Id == id).FirstOrDefaultAsync();

			//eInvApiLoginDetails = new eInvoiceAPILoginDetails();
   //         eInvApiLoginDetails.GSTIN = einvlogindetail.GSTIN;
   //         eInvApiLoginDetails.UserName = einvlogindetail.UserName;
			//eInvApiLoginDetails.Password = einvlogindetail.Password;
			//eInvApiLoginDetails.AppKey = einvlogindetail.AppKey;
   //         eInvApiLoginDetails.Sek = einvlogindetail.Sek;
   //         eInvApiLoginDetails.E_InvoiceTokenExp = einvlogindetail.E_InvoiceTokenExp;
   //         eInvApiLoginDetails.AuthToken = einvlogindetail.AuthToken;
   //         TaxPayerName = einvlogindetail.TaxPayerName;
        }

		private void SaveNewAuthToken(object sender, AuthTokenEventArg e)
		{
			//Write your code to save New AuthToken to DB, etc to TaxPayerID
			UpdateDatabase(TaxPayerID, e.SelIrp, this);
			
		}
		

		public override void LogAPITxn(APITxnLogArgs e)
		{
			//Write your code to Log API Txn
		}
		public static string UpdateDatabase(int TaxPayerId, int IRP, eInvoiceSession eInvSession)
		{

			//Database code to update authtoken
			//einvlogindetail einvlogindetail = new einvlogindetail();

			//einvlogindetail.GSTIN = eInvSession.eInvApiLoginDetails.GSTIN;
			//einvlogindetail.UserName = eInvSession.eInvApiLoginDetails.UserName;
			//einvlogindetail.Password = eInvSession.eInvApiLoginDetails.Password;
			//einvlogindetail.AppKey = eInvSession.eInvApiLoginDetails.AppKey;
			//einvlogindetail.Sek = eInvSession.eInvApiLoginDetails.Sek;
			//einvlogindetail.E_InvoiceTokenExp = eInvSession.eInvApiLoginDetails.E_InvoiceTokenExp;
			//einvlogindetail.AuthToken = eInvSession.eInvApiLoginDetails.AuthToken;
			//einvlogindetail.Id = TaxPayerId;

			//DBContext dB = new DBContext();
			//dB.Entry(einvlogindetail).State = EntityState.Modified;
			//dB.SaveChanges();
			
			return "Updated Successfully";
		}
	}
}
