using System;
using System.Linq;
using System.Web.Mvc;
using Platnosci.Models;
using Platnosci.Core.Linq;
using Platnosci.Core.Interface;
using System.Configuration;
using System.Net;
using System.IO;
using System.Threading;

namespace Platnosci.Controllers
{
    [Authorize]
    public class MerchantController : Controller
    {
        public const string BAD_HASH = "zlyHash";                  //błędne hasło - odpowied z eCard
        public const string HASH_ERROR_INFO = "payment not exist";

        private readonly IRepository<vPlatnosciEcard> _repVPayment;
        private readonly IRepository<PlatnosciEcard> _repPayment; 
        private readonly FunkcjePlatnosci _funkcjePlatnosci;
        private readonly eCardData _eCardData;
        private readonly ITranslateManager _translateManager;

        public MerchantController()
        {
            _repVPayment = new Repository<vPlatnosciEcard>(new DataContext());
            _repPayment = new Repository<PlatnosciEcard>(new DataContext());
            _funkcjePlatnosci = new FunkcjePlatnosci();
            _translateManager = new Translation();
            _eCardData = new eCardData(_repPayment);
        }
        public MerchantController(IRepository<vPlatnosciEcard> repVPayment, IRepository<PlatnosciEcard> repPayment, ITranslateManager translate, eCardData ecardData)
        {
            _repVPayment = repVPayment;
            _repPayment = repPayment;
            _funkcjePlatnosci = new FunkcjePlatnosci();
            _translateManager = translate;
            _eCardData = ecardData;
        }

        public ActionResult Merchant(Payer payer, string language)
        {
            language = _funkcjePlatnosci.SetLanguage(language);

            var id1 = Convert.ToInt32(payer.Id_faktury);
            var platnosc = _repVPayment.Find(p => p.ID_faktury == id1).SingleOrDefault();
                 
            if (platnosc == null) 
                return View("Error1", IsError("brakdanych", 0));
            
            if (!_funkcjePlatnosci.UserIdentity(platnosc, ControllerContext.HttpContext.User.Identity.Name))
                return View("Error1", IsError("weryfikacja", 0));

            var merchant = _eCardData.CreateMerchantData(platnosc, payer, language, Session.SessionID);
            
            if (merchant != null) merchant.IsValid();
            
            if (merchant == null || (merchant != null && (!String.IsNullOrEmpty(merchant.Error))))
                return View("Error1", IsError("error_hash", payer.Id_faktury));
            
            var adres = _eCardData.GetUrl(merchant);
            Response.Redirect(adres);           
            return new EmptyResult();          
        }         
        public ErrorViewData IsError(string errortxt, int idFaktury)
        {
            if (errortxt == "brakdanych")
                errortxt = _translateManager.Translate("tlumaczenia", "brakdanych");
            else if (errortxt == "weryfikacja")
                errortxt = _translateManager.Translate("tlumaczenia", "weryfikacja");
            else if (errortxt == "error_hash")
                errortxt = _translateManager.Translate("tlumaczenia", "error_hash");
            else if (errortxt == "error_hash")
                errortxt = _translateManager.Translate("tlumaczenia", "error_hash");

            return _funkcjePlatnosci.InitErrorViewData(errortxt, idFaktury);
        }
        
    }
}
