using System;
using UnityEngine;

namespace MJGameSDK
{
    public class MJGameLegal
    {
        private readonly MJGameHttpClient _http;
        private readonly MJGameConfig _config;

        public MJGameLegal(MJGameHttpClient http, MJGameConfig config)
        {
            _http = http;
            _config = config;
        }

        public void GetPrivacyPolicyUrl(Action<string> onSuccess, Action<MJGameResult> onError)
        {
            _http.Get<PrivacyPolicyResponse>("legal/privacy",
                response => onSuccess?.Invoke(response.data.url),
                error =>
                {
                    // 降级到本地配置
                    if (!string.IsNullOrEmpty(_config.privacyPolicyUrl))
                        onSuccess?.Invoke(_config.privacyPolicyUrl);
                    else
                        onError?.Invoke(error);
                });
        }

        public void OpenPrivacyPolicy()
        {
            GetPrivacyPolicyUrl(url =>
            {
                if (!string.IsNullOrEmpty(url))
                {
                    MJGameLogger.Info("Legal", $"Opening privacy policy: {url}");
                    Application.OpenURL(url);
                }
                else
                {
                    MJGameLogger.Warn("Legal", "Privacy policy URL is empty");
                }
            }, err =>
            {
                if (!string.IsNullOrEmpty(_config.privacyPolicyUrl))
                    Application.OpenURL(_config.privacyPolicyUrl);
                else
                    MJGameLogger.Warn("Legal", $"Privacy policy unavailable: {err.Message}");
            });
        }

        public void AcceptPrivacyPolicy(Action onSuccess, Action<MJGameResult> onError)
        {
            _http.Post<PrivacyAcceptResponse>("legal/privacy/accept", new PrivacyAcceptRequest(),
                _ =>
                {
                    MJGameLogger.Info("Legal", "Privacy policy accepted");
                    onSuccess?.Invoke();
                },
                onError);
        }
    }

    [Serializable]
    public class PrivacyPolicyResponse : MJGameResponse
    {
        public PrivacyPolicyData data;
    }

    [Serializable]
    public class PrivacyPolicyData
    {
        public string url;
        public string version;
    }

    [Serializable]
    public class PrivacyAcceptRequest { }

    [Serializable]
    public class PrivacyAcceptResponse : MJGameResponse { }
}
