﻿using ARGOFoundation;
using UnityEditor;
using UnityEngine;

namespace ARGOEditor
{
    public class UserSettings: IConfig
    {
        private const string UserSettingsKey = "ARGOUserSettings";

        public string Login
        {
            get => login;
            set => login = value;
        }

        public string Password
        {
            get => password;
            set => password = value;
        }

        public EndPointURL EndpointURL
        {
            get => endPoint;
            set => endPoint = value;
        }

        public int AppId => 3; // Editor

        [SerializeField]
        private string login;

        [SerializeField]
        private string password;

        [SerializeField]
        private EndPointURL endPoint;

        public static UserSettings GetOrCreateSettings()
        {
            var settingsString = EditorPrefs.GetString(UserSettingsKey);

            if (settingsString == null) return DefaultSettings();
            
            var cachedSettings = JsonUtility.FromJson<UserSettings>(settingsString);
            
            return cachedSettings ?? DefaultSettings();
        }

        private static UserSettings DefaultSettings()
        {
            return new UserSettings()
            {
                Login = "",
                Password = "",
                EndpointURL = EndPointURL.Dev
            };
        }

        public void Save()
        {
            DeleteCachedSettings();
            var settingsString = JsonUtility.ToJson(this);
            if (settingsString != null)
            {
                EditorPrefs.SetString(UserSettingsKey, settingsString);
            }
            else
            {
                AGLogger.LogError("Failed to convert ARGO settings to string. Please try again");
            }
           
        }

        public static void Reset()
        {
            DeleteCachedSettings();
        }

        public static bool IsSettingsExist()
        {
            var cached = EditorPrefs.GetString(UserSettingsKey);
            return !string.IsNullOrEmpty(cached);
        }

        private static void DeleteCachedSettings()
        {
            if (IsSettingsExist())
            {
                EditorPrefs.DeleteKey(UserSettingsKey);
            }
        }
    }
}
