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

using Firebase;
using Firebase.Firestore;

using UnityEngine;

namespace Bayat.SaveSystem.Storage
{

    /// <summary>
    /// The Firebase Realtime Database connection factory.
    /// </summary>
    public class FirebaseCloudFirestoreConnectionFactory : IConnectionFactory
    {

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

        public IStorage CreateStorage(StorageConnectionString connectionString)
        {
            if (connectionString.Prefix == "firestore" || connectionString.Prefix == "firebase-firestore" || connectionString.Prefix == "firebase-cloud-firestore")
            {
                string encodingName = connectionString.Get("encoding", StorageBase.DefaultTextEncodingName, "text-encoding", "encoding-name");
                bool useBase64 = connectionString.GetBoolean("usebase64", false, "use-base64");
                string databaseUrl = connectionString.Get("database", string.Empty, "database-url", "database-instance");
                FirebaseFirestore databaseInstance = FirebaseFirestore.DefaultInstance;
                return new FirebaseCloudFirestoreStorage(encodingName, useBase64, databaseInstance);
            }

            return null;
        }

    }

}