﻿using Unity.Ugc.Model;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace Unity.Ugc
{
    public partial class UgcSDK
    {
        /// <summary>
        /// 创建Entry
        /// </summary>
        /// <param name="modId">mod的id</param>
        /// <param name="model">创建Entry的参数</param>
        /// <returns>创建的Entry</returns>
        protected internal static async Task<ModEntry> CreateEntry(string modId, EntryModel model)
        {
            string url = $"{UgcServerAddress}/mods/basic/{modId}/entries/";
            var requestData = JsonConvert.SerializeObject(model);
            return await UgcClient.Post<ModEntry>(url, requestData);
        }

        /// <summary>
        /// 更新Entry
        /// </summary>
        /// <param name="modId">mod的id</param>
        /// <param name="entryId">entry的id</param>
        /// <param name="model">更新Entry的参数</param>
        /// <returns>更新的Entry</returns>
        protected internal static async Task<ModEntry> UpdateEntry(string modId, string entryId, EntryModel model)
        {
            string url = $"{UgcServerAddress}/mods/basic/{modId}/entries/{entryId}/";
            var requestData = JsonConvert.SerializeObject(model);
            return await UgcClient.Put<ModEntry>(url, requestData);
        }

        /// <summary>
        /// 删除Entry
        /// </summary>
        /// <param name="modId">mod的id</param>
        /// <param name="entryId">entry的id</param>
        protected internal static async Task<EmptyClass> DeleteEntry(string modId, string entryId)
        {
            string url = $"{UgcServerAddress}/mods/basic/{modId}/entries/{entryId}/";
            return await UgcClient.Delete<EmptyClass>(url);
        }

        /// <summary>
        /// 获取上传文件所需的token
        /// </summary>
        /// <param name="modId">mod的id</param>
        /// <param name="fileHash">entry的id</param>
        /// <returns>上传token</returns>
        protected internal static async Task<UploadToken> GetUploadToken(string modId, string fileHash)
        {
            string url = $"{UgcServerAddress}/mods/basic/{modId}/uploadtoken/{fileHash}/";
            return await UgcClient.Get<UploadToken>(url);
        }
    }
}