package com.ym.zxhcsdk.webview;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.ym.zxhcsdk.HcAppliContext;
import com.ym.zxhcsdk.R;
import com.ym.zxhcsdk.ZXHCConstant;

public class HcWebActivity extends Activity {
    private String url;
    private HcCustomWebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.hc_activity_web);
        url = getIntent().getStringExtra("url");
        //title =  getIntent().getStringExtra("title");
        webView = findViewById(R.id.activity_webview);
        initTitle();
        initWebView();
        webView.loadUrl(releactReportUrl(url));
    }
    //上报参数替换
    private static String releactReportUrl(String url){
        url = url.replace("__RE_DOWN_X__", ZXHCConstant.downX + "");//手指按下时相对于广告位左上角的横坐标
        url = url.replace("__RE_DOWN_Y__", ZXHCConstant.downY + "");//手指按下时相对于广告位左上角的纵坐标
        url = url.replace("__RE_UP_X__", ZXHCConstant.upX + "");//手指抬起时相对于广告位左上角的横坐标
        url = url.replace("__RE_UP_Y__", ZXHCConstant.upY + "");//手指抬起时相对于广告位左上角的纵坐标
        url = url.replace("__DOWN_X__", ZXHCConstant.downRawX + "");//手指按下时相对于屏幕左上角的横坐标
        url = url.replace("__DOWN_Y__", ZXHCConstant.downRawY + "");//手指按下时相对于屏幕左上角的纵坐标
        url = url.replace("__UP_X__", ZXHCConstant.upRawX + "");//手指抬起时相对于屏幕左上角的横坐标
        url = url.replace("__UP_Y__", ZXHCConstant.upRawY + "");//手指抬起时相对于屏幕左上角的纵坐标
        url = url.replace("__UTC_TS__", System.currentTimeMillis() + "");//客户端触发时间戳,自 1970 年起的毫秒 ，13 位
        url = url.replace("__UTC_TS_SECOND__", System.currentTimeMillis() / 1000 + "");//客户端触发时间戳,自 1970 年起的秒 ，10 位
        url = url.replace("__WIDTH__", "-999");//实际广告位的宽，单位为像素
        url = url.replace("__HEIGHT__", "-999");//实际广告位的高，单位为像素
        url = url.replace("__LATITUDE__", ZXHCConstant.device_geo_lat);//地理位置信息, 纬度
        url = url.replace("__LONGITUDE__", ZXHCConstant.device_geo_lon);//地理位置信息, 经度
        url = url.replace("__IP__", ZXHCConstant.device_ip);
        return  url;
    }
    private void initWebView() {


        WebSettings webSettings = webView.getSettings();
        webSettings.setSupportZoom(true); //支持缩放，默认为true。是下面那个的前提。
        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false，则该WebView不可缩放
        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件

        webSettings.setAllowFileAccess(true); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setLoadWithOverviewMode(true);
//        webView.getSettings().setDefaultFontSize(56);
        // webView.getSettings().setMinimumFontSize(40);//设置最小字体
        // 建议禁止缓存加载，以确保在攻击发生时可快速获取最新的滑动验证组件进行对抗。
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        // 设置不使用默认浏览器，而直接使用WebView组件加载页面。
        // 设置WebView组件支持加载JavaScript。
        webView.getSettings().setJavaScriptEnabled(true);
        // 建立JavaScript调用Java接口的桥梁。
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        try {
            // API 7, LocalStorage/SessionStorage
            webSettings.setDomStorageEnabled(true);
            webSettings.setDatabaseEnabled(true);
//            webSettings.setDatabasePath(HcAppliContext.get().filesDir.absolutePath + "/webcache");
            // API 7， Web SQL Database, 需要重载方法（WebChromeClient）才能生效，无法只通过反射实现
        } catch (Exception e) {
        }
        webView.setWebChromeClient(new WebChromeClient(){

            @Override
            public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
                WebView.WebViewTransport transport = (WebView.WebViewTransport)resultMsg.obj;
                transport.setWebView(webView);
                resultMsg.sendToTarget();
                return true;
            }
        });
        webView.setDownloadListener(new DownloadListener() {
            @Override
            public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.addCategory(Intent.CATEGORY_BROWSABLE);
                intent.setData(Uri.parse(url));
                startActivity(intent);
            }
        });
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url!=null){
                    if (shouldOverrideUrlLoadingByApp(url)) {
                        return true;
                    }
                }
                return super.shouldOverrideUrlLoading(view, url);
            }
        });
//        webView.loadDataWithBaseURL(null, url, "text/html", "utf-8", null);//解决乱码问题
    }

    private void initTitle() {

        findViewById(R.id.iv_user_toolbar_back).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        //TextView tv_title = findViewById(R.id.tv_user_toolbar_title);
//        tv_title.setText(title + "");
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (webView != null) {
            webView.loadUrl("javascript:onResume()");
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (webView != null) {
            webView.loadUrl("javascript:onPause()");
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (webView != null) {
            webView.destroy();
        }
    }


    private boolean shouldOverrideUrlLoadingByApp(String url){
        try {
            if (!url.startsWith("http") && !url.startsWith("https") && !url.startsWith("ftp")) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                if (isInstall(intent)) {
                    this.startActivity(intent);
                    return true;
                }
            } else {
                return false;
            }
        } catch (Exception e ) {
            return false;
        }

        return false;
    }
    //判断app是否安装
    public static Boolean isInstall(Intent intent) {
        return HcAppliContext.get().getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
    }

}