﻿using System.Collections;
using System.Collections.Generic;

using UnityEngine;

namespace Bayat.SaveSystem.Storage
{

    /// <summary>
    /// The PlayFab connection factory.
    /// </summary>
    public class PlayFabConnectionFactory : IConnectionFactory
    {

        [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
        private static void Register()
        {
            ConnectionStringFactory.Register(new PlayFabConnectionFactory());
        }

        public IStorage CreateStorage(StorageConnectionString connectionString)
        {
            if (connectionString.Prefix == "playfab" || connectionString.Prefix == "playfab-userdata")
            {
                string encodingName = connectionString.Get("encoding", StorageBase.DefaultTextEncodingName, "text-encoding", "encoding-name");
                bool useBase64 = connectionString.GetBoolean("usebase64", false, "use-base64");

                return new PlayFabUserDataStorage(encodingName, useBase64);
            }

            if (connectionString.Prefix == "playfab-entity" || connectionString.Prefix == "playfab-entity-objects")
            {
                string entityId;
                connectionString.GetRequired("entity-id", true, out entityId, "entityid");
                string entityType = connectionString.Get("entity-type", PlayFabEntityObjectsStorage.DefaultEntityType, "entity-type");
                string encodingName = connectionString.Get("encoding", StorageBase.DefaultTextEncodingName, "text-encoding", "encoding-name");
                bool useBase64 = connectionString.GetBoolean("usebase64", false, "use-base64");

                return new PlayFabEntityObjectsStorage(encodingName, useBase64, entityId, entityType);
            }

            if (connectionString.Prefix == "playfab-files" || connectionString.Prefix == "playfab-entity-files")
            {
                string entityId;
                connectionString.GetRequired("entity-id", true, out entityId, "entityid");
                string entityType = connectionString.Get("entity-type", PlayFabEntityObjectsStorage.DefaultEntityType, "entity-type");
                string encodingName = connectionString.Get("encoding", StorageBase.DefaultTextEncodingName, "text-encoding", "encoding-name");
                bool useBase64 = connectionString.GetBoolean("usebase64", false, "use-base64");

                return new PlayFabEntityFilesStorage(encodingName, useBase64, entityId, entityType);
            }

            return null;
        }

    }

}