using Adplay.Config;
using Adplay.HTTP;
using Adplay.Utility;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;

namespace Adplay.API
{
    [CreateAssetMenu(fileName = nameof(Api), menuName = PathUtility.ConfigPath + nameof(Api))]
    public class Api : ScriptableObject
    {
        [SerializeField] private ApiConfigData apiConfigData;


        public async Task<HttpResponse<T>> Get<T>(string route, Dictionary<string, object> querryParams)
        {
            return await Http.Get<T>(apiConfigData.GetEndPoint(route), apiConfigData.GetHeaders(), querryParams);
        }

        public async Task<HttpResponse<T>> Get<T>(string route)
        {
            return await Http.Get<T>(apiConfigData.GetEndPoint(route), apiConfigData.GetHeaders());
        }

        public async Task<HttpResponse<TResult>> Post<TResult, TSendData>(string route, TSendData data)
        {
            return await Http.Post<TResult, TSendData>(apiConfigData.GetEndPoint(route), apiConfigData.GetHeaders(), data);
        }

        public async Task<HttpResponse<T>> Post<T>(string endPoint, string jsonData)
        {
            return await Http.Post<T>(apiConfigData.GetEndPoint(endPoint), apiConfigData.GetHeaders(), jsonData);
        }

        public async Task<HttpResponse<Texture2D>> GetTexture(string route)
        {
            return await Http.GetTexture<Texture2D>(apiConfigData.GetEndPoint(route), apiConfigData.GetHeaders());
        }

        public async Task<HttpResponse<Texture2D>> GetTextureDirectly(string url)
        {
            return await Http.GetTexture<Texture2D>(url);
        }

        public async Task<HttpResponse<AudioClip>> GetAudioDirectly(string url)
        {
            return await Http.GetAudio(url, AudioType.MPEG);
        }


    }
}
