package com.unit.websdk;

import android.content.Context;
import android.os.Looper;
import android.text.TextUtils;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.webkit.WebView;
import androidx.annotation.UiThread;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;

// webview缓存列表
public class WebViewCache {
    private static Map<String, AdWebView> caches = new ConcurrentHashMap<>();

    // webview预加载，为了让加快webview的打开速度，可以提前对它进行预加载
    public static void preload(Context context, String url) {
        WebView webView = caches.get(url);
        if (webView == null) {
            webView = create(context, url, true);
        }
        webView.loadUrl(url);
    }

    // 根据url从缓存列表中获取一个webview对象
    public static AdWebView get(String url) {
        return caches.get(url);
    }

    // 创建一个webview对象
    public static AdWebView create(Context context, String url) {
        return create(context, url, false);
    }

    @UiThread
    public static void clear(){
        if (Looper.myLooper() != Looper.getMainLooper()) {
            //如果不是在UI线程调用的，直接返回。
            return;
        }
        caches.values().forEach(adWebView -> {
            String url = adWebView.getUrl();
            ViewParent viewParent = adWebView.getParent();
            if(viewParent instanceof ViewGroup){
                ((ViewGroup) viewParent).removeView(adWebView);
            }
            close(url);
        });
        caches.clear();
    }

    @UiThread
    public static void close(String url){
        if (TextUtils.isEmpty(url)) return;
        if (Looper.myLooper() != Looper.getMainLooper()) {
            //如果不是在UI线程调用的，直接返回。
            return;
        }
        AdWebView removedWebView = caches.remove(url);
        if(removedWebView != null){
            ViewParent viewParent = removedWebView.getParent();
            if(viewParent instanceof ViewGroup){
                ((ViewGroup) viewParent).removeView(removedWebView);
            }
            removedWebView.destroy();
        }
    }

    private static AdWebView create(Context context, String url, boolean isPreload) {
        AdWebView webView = new AdWebView(context, new WebJsBridge(url, "TenAdInterface"), isPreload);//
        caches.put(url, webView);
        return webView;
    }
}
