﻿using AsmodeeDigital.Common.Plugin.Domain.Data;
using AsmodeeDigital.Common.Plugin.Manager.Event;
using AsmodeeDigital.CrossPromo.Plugin.Domain;
using AsmodeeDigital.CrossPromo.Plugin.Domain.Data;
using System;

namespace AsmodeeDigital.Common.Plugin.Network
{
    public partial class RestAPI
    {
        #region Events
        public event Action<Product> ReceivingProductEvent;

        public event Action<GroupProduct> ReceivingGroupProductEvent;
        #endregion

        /// <summary>
        /// Cros promo parameters
        /// </summary>
        private CrossPromoParameters _promoParameters;

        public RestAPI(DoWNetworkParameters networkParameters, CrossPromoParameters promoParameters) : this(networkParameters)
        {
            _networkParameters = networkParameters;
            _promoParameters = promoParameters;
        }

        #region Cross Promo
        public void BannerRequest(string accessToken)
        {
            string endpoint = String.Format("/main/v2/showcase/banner/{0}/{1}/?debug={2}", _promoParameters.Channel, _promoParameters.Language, _promoParameters.DebugSecret);

            RequestCallGet(accessToken, endpoint,
            (Data data) =>
            {
                if (ReceivingProductEvent != null)
                    EventManager.Instance.QueueEvent<Product>(ReceivingProductEvent, data.product);
            });
        }

        public void MoreGameRequest(string accessToken, MoreGamesFilters moreGamesFilters, int nbCol)
        {
            string endpoint = String.Format("/main/v2/showcase/games/{0}/{1}/?tag={2}&nbcol={3}&debug={4}", _promoParameters.Channel, _promoParameters.Language, moreGamesFilters.ToString().ToLower(), nbCol, _promoParameters.DebugSecret);

            RequestCallGet(accessToken, endpoint,
            (Data data) =>
            {
                GroupProduct groupProduct = new GroupProduct();
                groupProduct.products = data.products;

                if (ReceivingGroupProductEvent != null)
                    EventManager.Instance.QueueEvent<GroupProduct>(ReceivingGroupProductEvent, groupProduct);
            });
        }

        public void InterstitialRequest(string accessToken, int nbCol)
        {
            string endpoint = String.Format("/main/v2/showcase/interstitial/{0}/{1}/?nbcol={2}&debug={3}", _promoParameters.Channel, _promoParameters.Language, nbCol, _promoParameters.DebugSecret);

            RequestCallGet(accessToken, endpoint,
            (Data data) =>
            {
                GroupProduct groupProduct = new GroupProduct();
                groupProduct.products = data.products;

                if (ReceivingGroupProductEvent != null)
                    EventManager.Instance.QueueEvent<GroupProduct>(ReceivingGroupProductEvent, groupProduct);
            });
        }
        #endregion
    }
}