package com.puntoz.pro;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

    WebView webView;
    String BASE = "http://216.152.155.250/PUNTOZ_PANEL/";
    String PANEL_URL = BASE + "preview.php?apk_tv=1";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        webView = new WebView(this);
        setContentView(webView);

        webView.setFocusable(true);
        webView.setFocusableInTouchMode(true);
        webView.requestFocus();

        WebSettings s = webView.getSettings();
        s.setJavaScriptEnabled(true);
        s.setDomStorageEnabled(true);
        s.setMediaPlaybackRequiresUserGesture(false);
        s.setLoadWithOverviewMode(true);
        s.setUseWideViewPort(true);
        s.setTextZoom(100);
        s.setSupportZoom(false);
        s.setBuiltInZoomControls(false);
        s.setDisplayZoomControls(false);
        s.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

        webView.setInitialScale(1);
        webView.setVerticalScrollBarEnabled(false);
        webView.setHorizontalScrollBarEnabled(false);

        webView.setWebChromeClient(new WebChromeClient());
        webView.addJavascriptInterface(new AndroidBridge(), "PuntozAndroid");

        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return manejarUrl(url);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return manejarUrl(request.getUrl().toString());
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                inyectarBotonTV();

                if (url != null && url.contains("tv.php")) {
                    aplicarEscalaTV();
                }
            }
        });

        webView.loadUrl(PANEL_URL);
    }

    private boolean manejarUrl(String url) {
        if (url == null) return false;

        if (url.contains("tv.php")) {
            webView.loadUrl(BASE + "tv.php?apk_tv=1");
            return true;
        }

        if (url.contains(".m3u8") || url.contains(".mp4") || url.contains(".mkv") || url.contains("stream")) {
            Intent i = new Intent(MainActivity.this, PlayerActivity.class);
            i.putExtra("url", url);
            startActivity(i);
            return true;
        }

        return false;
    }

    public class AndroidBridge {
        @JavascriptInterface
        public void abrirTV() {
            runOnUiThread(() -> webView.loadUrl(BASE + "tv.php?apk_tv=1"));
        }
    }

    private void inyectarBotonTV() {
        String js =
            "javascript:(function(){"
            + "var all=document.querySelectorAll('a,button,div');"
            + "for(var i=0;i<all.length;i++){"
            + "var t=(all[i].innerText||all[i].textContent||'').toLowerCase();"
            + "var h=(all[i].getAttribute('href')||'').toLowerCase();"
            + "if(t.indexOf('tv en vivo')>=0 || h.indexOf('tv.php')>=0){"
            + "all[i].setAttribute('tabindex','0');"
            + "all[i].onclick=function(e){e.preventDefault();PuntozAndroid.abrirTV();return false;};"
            + "}"
            + "}"
            + "})();";
        webView.evaluateJavascript(js, null);
    }


    private void aplicarEscalaTV() {
        String js =
            "javascript:(function(){"
            + "var m=document.querySelector('meta[name=viewport]');"
            + "if(!m){m=document.createElement('meta');m.name='viewport';document.head.appendChild(m);}"
            + "m.content='width=1920,height=1080,initial-scale=1,maximum-scale=1,user-scalable=no';"
            + "document.documentElement.style.margin='0';"
            + "document.documentElement.style.padding='0';"
            + "document.body.style.margin='0';"
            + "document.body.style.padding='0';"
            + "document.body.style.overflow='hidden';"
            + "})();";
        webView.evaluateJavascript(js, null);
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            int k = event.getKeyCode();

            if (k == KeyEvent.KEYCODE_DPAD_CENTER || k == KeyEvent.KEYCODE_ENTER) {
                webView.evaluateJavascript("document.activeElement && document.activeElement.click();", null);
                return true;
            }
        }
        return super.dispatchKeyEvent(event);
    }
}
