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

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

        public event Action<GroupProduct> ReceivingGroupProductEvent;
        #endregion

        #region Cross Promo
        public void BannerRequest(string accessToken)
        {
            string endpoint = String.Format("/main/v2/showcase/banner/{0}/{1}/", _platform, _language);

            RequestCallGet(accessToken, endpoint,
            (Data data) =>
            {
                RaiseReceivingProductEvent(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}", _platform, _language, moreGamesFilters.ToString().ToLower(), nbCol);

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

                RaiseReceivingGroupProductEvent(groupProduct);
            });
        }

        public void InterstitialRequest(string accessToken, int nbCol)
        {
            string endpoint = String.Format("/main/v2/showcase/interstitial/{0}/{1}/?nbcol={2}", _platform, _language, nbCol);

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

                RaiseReceivingGroupProductEvent(groupProduct);
            });
        }
        #endregion

        #region Raising events
        public void RaiseReceivingGroupProductEvent(GroupProduct groupProduct)
        {
            if (ReceivingGroupProductEvent != null)
                EventManager.Instance.QueueEvent<GroupProduct>(ReceivingGroupProductEvent, groupProduct);
        }

        public void RaiseReceivingProductEvent(Product product)
        {
            if (ReceivingProductEvent != null)
                EventManager.Instance.QueueEvent<Product>(ReceivingProductEvent, product);
        }
        #endregion
    }
}