package com.puntoz.pro;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

    private WebView webView;
    private String lastEnterUrl = "";
    private long lastEnterTime = 0;

    private static final String PANEL_URL =
            "http://216.152.155.250/PUNTOZ_PANEL/preview.php?apk_tv=1&epg_refresh=1";

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle b) {
        super.onCreate(b);

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

        WebSettings s = webView.getSettings();
        s.setJavaScriptEnabled(true);
        s.setDomStorageEnabled(true);
        s.setMediaPlaybackRequiresUserGesture(false);
        s.setLoadWithOverviewMode(true);
        s.setUseWideViewPort(true);
        s.setSupportZoom(false);
        webView.setInitialScale(75);

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

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url != null && url.endsWith(".apk")) {
                    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(i);
                    return true;
                }
                view.loadUrl(url);
                return true;
            }
        });

        webView.clearCache(true);
        webView.clearHistory();
        webView.clearFormData();
        webView.loadUrl(PANEL_URL + "&v=" + System.currentTimeMillis());
    }

    public class AndroidBridge {
        @JavascriptInterface
        public void abrirFullscreen(String url) {
            Intent i = new Intent(MainActivity.this, PlayerActivity.class);
            i.putExtra("url", url);
            startActivity(i);
        }
    }

    private void abrirPlayer(String payload) {
        String[] parts = payload.split("###PZ###", -1);

        String url = parts.length > 0 ? Uri.decode(parts[0]) : "";
        String name = parts.length > 1 ? Uri.decode(parts[1]) : "Canal";
        String logo = parts.length > 2 ? Uri.decode(parts[2]) : "";
        String now = parts.length > 3 ? Uri.decode(parts[3]) : "No information";
        String next = parts.length > 4 ? Uri.decode(parts[4]) : "No information";
        String start = parts.length > 5 ? Uri.decode(parts[5]) : "";
        String end = parts.length > 6 ? Uri.decode(parts[6]) : "";
        String nextStart = parts.length > 7 ? Uri.decode(parts[7]) : "";
        String nextEnd = parts.length > 8 ? Uri.decode(parts[8]) : "";

        if (!url.startsWith("http")) return;

        Intent i = new Intent(MainActivity.this, PlayerActivity.class);
        i.putExtra("url", url);
        i.putExtra("channel_name", name);
        i.putExtra("channel_logo", logo);
        i.putExtra("now_title", now);
        i.putExtra("next_title", next);
        i.putExtra("start_time", start);
        i.putExtra("end_time", end);
        i.putExtra("next_start_time", nextStart);
        i.putExtra("next_end_time", nextEnd);
        startActivity(i);
    }

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

            if (key == KeyEvent.KEYCODE_DPAD_CENTER || key == KeyEvent.KEYCODE_ENTER) {
                webView.evaluateJavascript(
                        "(function(){"+
                        "var f=document.querySelector('.focus');"+
                        "var r=null;"+
                        "if(f&&f.classList.contains('videoBox')) r=document.querySelector('.row.active');"+
                        "else if(f&&f.classList.contains('row')) r=f;"+
                        "else r=document.querySelector('.row.active');"+
                        "if(!r){if(document.activeElement){document.activeElement.click();return 'CLICK';}return '';}"+
                        "var u=r.getAttribute('data-play')||'';"+
                        "var n=r.getAttribute('data-name')||'Canal';"+
                        "var l=r.getAttribute('data-logo')||'';"+
                        "var a=r.getAttribute('data-now')||'No information';"+
                        "var nx=r.getAttribute('data-next')||'No information';"+
"var ns=r.getAttribute('data-next-start')||'';"+
"var ne=r.getAttribute('data-next-end')||'';"+
                        "var st=r.getAttribute('data-start')||'';"+
                        "var en=r.getAttribute('data-end')||'';"+
                        "var p=encodeURIComponent(u)+'###PZ###'+encodeURIComponent(n)+'###PZ###'+encodeURIComponent(l)+'###PZ###'+encodeURIComponent(a)+'###PZ###'+encodeURIComponent(nx)+'###PZ###'+encodeURIComponent(st)+'###PZ###'+encodeURIComponent(en)+'###PZ###'+encodeURIComponent(ns)+'###PZ###'+encodeURIComponent(ne);"+
                        "if(f&&f.classList.contains('videoBox')) return 'FULL:'+p;"+
                        "if(f&&f.classList.contains('row')){f.click();return 'ROW:'+p;}"+
                        "if(document.activeElement){document.activeElement.click();return 'CLICK';}"+
                        "return '';"+
                        "})()",
                        value -> {
                            if (value == null) return;
                            value = value.replace("\"", "").replace("\\\"", "");

                            if (value.startsWith("FULL:")) {
                                abrirPlayer(value.substring(5));
                                return;
                            }

                            if (value.startsWith("ROW:")) {
                                String payload = value.substring(4);
                                String[] parts = payload.split("###PZ###", -1);
